ASP.NET MVC 4框架揭秘:Controller(3)
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属性被设置为True BeginExecute方法内部会以同步的方式调用Execute/ExecuteCore方法 (S )
图 Controller在DisableAsyncSupport
属性为True的情况下的同步执行方式
ASP NET MVC应用编程接口中还定义了一个System Web Mvc AsyncController类型 从名称上看 AsyncController是一个基于异步的Controller 但是这里的异步并不是指Controller的异步执行 而是Action方法的异步执行 从如下的代码片段中可以看出 这个直接继承自抽象类Controller的AsyncController是一个 空 类型(没有额外定义和重写基类的类型成员) 在上一个版本中 以XxxAsync/XxxCompleted形式定义的异步Action方法均定义在继承自AsyncController的Controller类型中 考虑到向后兼容性 AsyncController在新的版本中保留下来
public abstract class AsyncController : Controller
{}
只有以传统方式(XxxAsync/XxxCompleted)定义的异步Action方法才需要定义在AsyncController中 ASP NET MVC 提供了新的异步Action方法定义方式 使我们可以通过一个返回类型为Task的方法来定义以异步方式执行的Action 这样的Action方法不需要定义在AsyncController中
返回目录 ASP NET MVC 框架揭秘
编辑推荐
ASP NET开发培训视频教程
Microsoft NET框架程序设计视频教程
Java程序性能优化 让你的Java程序更快 更稳定
lishixinzhi/Article/program/net/201311/16099