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