在asp.net中使用Session with Threads

时间:2014-11-19 08:28:46

标签: asp.net multithreading session

我想通过我的asp.net网站中的所有页面使用Session对象,首先我在这样的会话中保存一个对象,这行代码在HttpHandler中

HttpContext.Current.Session["DocumnetInfo"] = doc;

之后,我创建了一个操作此doc的线程,并将会话作为参数发送到线程,如下所示

            HttpContext ctx = HttpContext.Current;
            Thread t = new Thread(new ThreadStart(() =>
            {
               // HttpContext.Current = ctx;
                SomeMethod(ctx);
            }));
            t.Start();

和在SomeMethod我读了会话如下:

private void SomeMethod ( HttpContext  ctx)
{

    DocResultsBLL doc = (DocResultsBLL)ctx.Session["DocumnetInfo"];
    // Here is the logic of the manipulation
    // then save the doc in the session back
    ctx.Session["DocumnetInfo"]=doc;
    Response.Redirect("ResultsPage.aspx");
}

问题是我无法在结果页面中读取会话.HttpContext.Current为null。 1 - 如何使用会话,将其发送到线程,然后将其恢复到线程之外。 2-除会话之外还有其他任何方案更好吗? 3-如果客户端关闭浏览器,我该如何停止线程?

1 个答案:

答案 0 :(得分:0)

唯一可以做的就是传递http上下文,请参阅以下链接,您将了解为什么在多线程应用程序中无法使用会话。

http://blogs.msdn.com/b/webtopics/archive/2009/01/30/why-can-t-i-execute-two-requests-from-the-same-session-simultaneously-for-an-asp-net-application.aspx