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++音频/视频技术开发与实战