我有一个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,所以不能这样做
答案 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用户之间共享。