ASP.NET中的会话和线程

时间:2011-12-05 12:34:51

标签: c# asp.net

我有一个ASP.NET网站,其中一个线程负责执行从数据库队列中恢复的一些代码。

是否可以访问Session或将其作为参数传递?

我目前的代码如下:

MediaJob nextJob = GetNextJobFromDB();

CreateMedia media = new CreateMedia();

Thread t = new Thread(new parameterizedThreadStart(media.DOSTUFF);

t.Start(nextJob);

在线程中运行时,HttpContext.Current.Session为null,所以不能这样做

3 个答案:

答案 0 :(得分:3)

编辑:

 HttpContext ctx = HttpContext.Current;
 Thread t = new Thread(new ThreadStart(() =>
                {
                    HttpContext.Current = ctx;
                    worker.DoWork();
                }));
 t.Start();
 // [... do other job ...]
 t.Join();

答案 1 :(得分:3)

如果你的工作在asp.net线程之外完成,那么假设会话可用是不安全的。唯一确定的方法是将此数据显式传递给线程。您可以通过在named data slot

中分配数据来执行此操作

答案 2 :(得分:0)

您无法在线程中访问会话,但可以使用以下方式共享您的数据:HttpRuntime.Cache

但要注意以下几点:与会话不同,缓存会过期。此外,缓存在所有Web用户之间共享。