之前看過老趙這兩篇文章。也研究了一下老趙異步的實現方式。
不過感覺自己擴展的話,在ASP.NET MVC中使用異步還真是麻煩,剛好看到從RC1版開始 ASP.NET MVC Futures中提供了幾個支持異步的類。
相關的類包括AsyncActionDescriptor、AsyncController、AsyncControllerActionInvoker、 AsyncManager、AsyncResultWrapper、AsyncTimeoutAttribute、NoAsyncTimeoutAttribute,相關接口有 IAsyncActionDescriptor、IAsyncActionInvoker、IAsyncController、IAsyncManagerContainer。
下面說一下怎麼用它們
一、使用異步Action前的准備工作
1.引用Microsoft.Web.Mvc。
2.先要將要異步處理的Url交由MvcHttpAsyncHandler處理,這一步可以由 AsyncRouteCollectionExtensions.MapAsyncRoute來設置規則,將原MapRoute處理的規則改為 MapAsyncRoute,如:
routes.MapAsyncRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" } );
3.將相應的Controller繼承於AsyncController。
public class HomeController : AsyncController { }
4.我們約定以下定義的Action都在HomeController中
二、第一種異步Action方式:Action、ActionCompleted方式
ASP.NET MVC Futures支持按名稱自動尋找異步Action的方法
Url:/Home/Async1
其使用方法為
public void Async1(){ //主線程 } public ActionResult Async1Completed(){ //自動尋找與主線程 Action名稱+Completed 的Action 做為異步Action return Content("Async1"); }