2012-10-09 53 views
0

我需要在异步模式下执行一个方法。我试过创建一个委托,但会话在请求完成后被销毁。此功能需要继续运行后才能使用System.Web.HttpContext.Current.Session如何在ASP.NET MVC 2请求中使用异步委托?

是否有一种解决方法,允许异步运行的方法在请求完成后继续执行?

谢谢。

回答

0

您可以使用委托(例如用ThreadPool.QueueUserWorkItem),但你需要抓住参考HttpSessionStateBase外委托的:直到你保持参考

HttpSessionStateBase session = Session; 

ThreadPool.QueueUserWorkItem(delegate 
{ 
    // You can access session variable here 
    ... 
}); 

会话也不会被破坏。这里有一个简单的样本:Reporting server side operation progress with jQuery UI Progressbar

+0

在委托使用的方法中,我调用另一个使用System.Web.HttpContext.Current.Session的方法。我不能使用这个例子。 – Emanuel

+0

@Emanuel它不会工作,因为在这一点上没有当前的HttpContext。你需要在代理之前获取你需要的东西,并将它作为参数传递给任何方法等等(稍后它会被正确地序列化/反序列化,但是你需要记住使用HttpSessionStateBase.SyncRoot来同步并行访问)。 – tpeczek