C# 异步线程和会话

C# 异步线程和会话,c#,asp.net,session,asynchronous,C#,Asp.net,Session,Asynchronous,使用此签名生成新异步线程后,ASP.NET会话对象是否可用于此新线程 IAsyncResult asyncCall = f.BeginInvoke(null, f); 我不知道您谈论的是哪个会话对象,但如果您谈论的是ASP.NET会话,它可能不可用。从后台线程访问ASP.NET会话也是一种不好的做法。我建议您将一个包含所有必要信息的对象传递给这个后台进程,而不是让它从会话中提取东西=>使它的可重用性降低 通常情况下,如果此线程的调用方等待它完成会话,则会话应该一直可用,但老实说,这是一个糟糕的

使用此签名生成新异步线程后,ASP.NET会话对象是否可用于此新线程

IAsyncResult asyncCall = f.BeginInvoke(null, f);

我不知道您谈论的是哪个会话对象,但如果您谈论的是ASP.NET会话,它可能不可用。从后台线程访问ASP.NET会话也是一种不好的做法。我建议您将一个包含所有必要信息的对象传递给这个后台进程,而不是让它从会话中提取东西=>使它的可重用性降低


通常情况下,如果此线程的调用方等待它完成会话,则会话应该一直可用,但老实说,这是一个糟糕的设计,我只会避免它。

是的,我所说的是ASP.NET会话对象。这是因为ASP.NET会话对象不是线程安全的?我认为即使它在线程启动时可用,它也可以在任何时候被释放,尽管如果调用方在退出前等待异步任务完成,会话应该在整个任务中保持。@Jim,说得好,我已经更新了答案以包含这些信息。@Darin那么,在后台线程和页面之间共享对象的最佳方式是什么呢?我也面临同样的问题@NLV,您可以在启动线程时传递所有必要的信息。就向页面传递信息的线程而言,您必须定义页面的含义,因为后台线程执行启动该线程的页面时,该线程可能早已消失。