0
我需要在异步模式下执行一个方法。我试过创建一个委托,但会话在请求完成后被销毁。此功能需要继续运行后才能使用System.Web.HttpContext.Current.Session
。如何在ASP.NET MVC 2请求中使用异步委托?
是否有一种解决方法,允许异步运行的方法在请求完成后继续执行?
谢谢。
我需要在异步模式下执行一个方法。我试过创建一个委托,但会话在请求完成后被销毁。此功能需要继续运行后才能使用System.Web.HttpContext.Current.Session
。如何在ASP.NET MVC 2请求中使用异步委托?
是否有一种解决方法,允许异步运行的方法在请求完成后继续执行?
谢谢。
您可以使用委托(例如用ThreadPool.QueueUserWorkItem
),但你需要抓住参考HttpSessionStateBase
外委托的:直到你保持参考
HttpSessionStateBase session = Session;
ThreadPool.QueueUserWorkItem(delegate
{
// You can access session variable here
...
});
会话也不会被破坏。这里有一个简单的样本:Reporting server side operation progress with jQuery UI Progressbar。
在委托使用的方法中,我调用另一个使用System.Web.HttpContext.Current.Session的方法。我不能使用这个例子。 – Emanuel
@Emanuel它不会工作,因为在这一点上没有当前的HttpContext。你需要在代理之前获取你需要的东西,并将它作为参数传递给任何方法等等(稍后它会被正确地序列化/反序列化,但是你需要记住使用HttpSessionStateBase.SyncRoot来同步并行访问)。 – tpeczek