领先技术 - 再探异步ASP.NET页
步和异步路由。下面是注册异步路由的旧方法:
您必须使用 MapAsyncRoute 扩展方法,而不是传统同步方法所用的标准 MapRoute。不过,在 ASP.NET MVC 2 RC 中,已经消除了这种区别。现在,无论 随后将如何执行操作,注册路由都采用一种方式,即使用 MapRoute 方法。 因此,以常规方式处理请求的 URL,并确定要使用的控制器类的名称。实际上 ,需要在派生自新 AsyncController 类的控制器类上定义异步方法,如下所示:
如果控制器类继承自 AsyncController,则用于将操作名称映射到方法的约定 有些不同。AsyncController 类可以处理同步和异步请求。因此,所使用的约定 可识别出方法 Run 和方法 RunAsync,如下所示:
但是,如果执行上述代码,将引发异常(请参见图 3)。 异步操作通过名称来标识,预期的模式为 xxxAsync,其中 xxx 表示要执行的 操作的默认名称。显然,如果存在另一个名为 xxx 的方法,并且未使用属性进行 区分,则会引发异常,如图 3 所示。 图 3 操作名称中的不明确引用 “Async”这个词被视为后缀。用于调用 RunAsync 方法的 URL 仅包含前缀“ Run”。例如,以下 URL 将调用方法 RunAsync,将值 5 作为路由参数传递:
将此操作解析为同步操作还是异步操作,取决于 AsyncController 类中的方 法。但是,xxxAsync 方法仅识别操作的触发器。请求的终结器是控制器类中的另 一个方法,名为 xxxCompleted:
请注意用于定义异步操作的这两个方法的不同签名。触发器应为 void 方法。 如果将它定义为返回任何值,则返回值将被忽略。通常,xxxAsync 方法的输入参 数需要进行模型绑定。终结器方法通常返回一个 ActionResult 对象,接收一个 包含待处理数据的自定义对象并将数据传递给视图对象。要将由触发器计算的值 与终结器声明的参数进行匹配,需要使用一个特殊协议。 AsyncController 类 AsyncController 控制器类继承自 Controller,它实现一组新的接口,如下 所示:
异步控制器最独特的方面是具有专门的操作调用程序对象,该对象在底层使用 ,用于执行操作。该调用程序需要一个计数器来跟踪操作的数目,这些操作构成 总体操作,并且必须在可以声明总体操作终止之前进行同步。图 4 提供了异步操 作的示例实现。 图 4 简单的异步操作方法
AsyncManager 类上的 OutstandingOperations 成员提供 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |