Controller()
雖然抽象類中定義了一個表示當前HttpResponse的屬性Response但是當BeginExecute方法執行的時候該屬性尚未初始化所以上面代碼中使用的Response屬性是我們自行定義的運行該程序後會在浏覽器中呈現出如圖所示的輸出結果從輸出方法的調用順序中不難看出在默認的情況下Controller是以異步的方式執行的(S)
圖 Controller在默認情況下的異步執行方式
現在按照如下的方式重寫虛屬性DisableAsyncSupport使它直接返回True以關閉對Controller異步執行的支持
public class HomeController : Controller
{
//其他成員
protected override bool DisableAsyncSupport
{
get{return true;}
}
}
再次執行我們的程序將會得到如圖所示的輸出結果可以看出由於HomeController間接地實現了IAsyncController接口Controller的執行總是以調用BeginExecute/EndExecute方法的方式來執行但是由於DisableAsyncSupport屬性被設置為TrueBeginExecute方法內部會以同步的方式調用Execute/ExecuteCore方法(S)
圖 Controller在DisableAsyncSupport
屬性為True的情況下的同步執行方式
ASPNET MVC應用編程接口中還定義了一個SystemWebMvcAsyncController類型從名稱上看AsyncController是一個基於異步的Controller但是這裡的異步並不是指Controller的異步執行而是Action方法的異步執行從如下的代碼片段中可以看出這個直接繼承自抽象類Controller的AsyncController是一個空類型(沒有額外定義和重寫基類的類型成員)在上一個版本中以XxxAsync/XxxCompleted形式定義的異步Action方法均定義在繼承自AsyncController的Controller類型中考慮到向後兼容性AsyncController在新的版本中保留下來
public abstract class AsyncController : Controller
{}
只有以傳統方式(XxxAsync/XxxCompleted)定義的異步Action方法才需要定義在AsyncController中ASPNET MVC 提供了新的異步Action方法定義方式使我們可以通過一個返回類型為Task的方法來定義以異步方式執行的Action這樣的Action方法不需要定義在AsyncController中
返回目錄ASPNET MVC 框架揭秘
編輯推薦
ASP NET開發培訓視頻教程
Microsoft NET框架程序設計視頻教程
Java程序性能優化讓你的Java程序更快更穩定
Visual C++音頻/視頻技術開發與實戰
From:http://tw.wingwit.com/Article/program/net/201311/16099.html