通过Context访问ASP.NET应用程序中的会话

时间:2017-12-06 10:04:36

标签: c# asp.net asp.net-mvc multithreading task

我有一个mvc动作方法,类似于下面的构造。

public ActionResult About()
{
    System.Web.HttpContext.Current.Session["testValue"] = "about";
    ViewBag.Message = "Your application description page.";

    var sc = SynchronizationContext.Current;

    Task t = Task.Run(( ) => {

        string sessionValue = null;

        sc.Post((state)=> {
            //How do I access Session value here ?

        },null);


    });

    return View();
}

我想知道如何访问"会话价值"在sc.Post方法?基本上,当新线程启动时,它需要访问父线程的HttpSession。

1 个答案:

答案 0 :(得分:2)

由于Session是从当前线程派生的,因此您必须从原始请求线程注入会话:

var session = System.Web.HttpContext.Current.Session;

然后在线程委托中使用session。请注意,如果原始请求被终止,则可以在此期间破坏会话。

session["testValue"] = "abc";