使用BeginMethod/EndMethod模式Using an Asynchronous Controller in ASP.NET MVC部分涉及Sync()
方法。它沒有鏈接,我無法通過谷歌搜索查找文檔,因爲同步過於常見。有人能指出我的寫作方向嗎?ASP.NET異步控制器和調用Sync();什麼是「同步()」?
爲了確保您可以訪問 的HttpContext.Current實例並 避免競爭條件,您可以通過 從回調方法調用 同步()恢復HttpContext.Current。
使用BeginMethod/EndMethod模式Using an Asynchronous Controller in ASP.NET MVC部分涉及Sync()
方法。它沒有鏈接,我無法通過谷歌搜索查找文檔,因爲同步過於常見。有人能指出我的寫作方向嗎?ASP.NET異步控制器和調用Sync();什麼是「同步()」?
爲了確保您可以訪問 的HttpContext.Current實例並 避免競爭條件,您可以通過 從回調方法調用 同步()恢復HttpContext.Current。
這是AsyncManager
類的一種方法。 http://msdn.microsoft.com/en-us/library/system.web.mvc.async.asyncmanager.sync.aspx
當您通過調用控制器操作中的BeginXyz/EndXyz方法產生異步操作時,處理異步響應的線程不在ASP.NET的控制之下。因此,您無法觸摸這些線程內的HttpContext,控制器實例或任何其他共享狀態。調用Sync()方法基本上同步對請求的訪問;它會恢復HttpContext.Current並授予您訪問觸摸HttpContext,控制器等的權限,但僅限於Sync()調用期間。 MVC Futures的RegisterTask()擴展方法試圖使這更簡單一些,因爲基本上它將委託傳遞給目標Begin和End方法,而RegisterTask()輔助方法將確保End線程在適當的同步上下文中執行。
如果您通過在控制器操作中調用XyzAsync/XyzCompleted方法來派生異步操作,則不必擔心這一點,因爲完成的處理程序會自動在同步上下文中運行。