之前看过老赵这两篇文章。也研究了一下老赵异步的实现方式。

不过感觉自己扩展的话,在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的方法

http://www.cnblogs.com/Home/Async1

其使用方法为

       public void Async1(){//主线程}public ActionResult Async1Completed(){//自动寻找与主线程 Action名称+Completed 的Action 做为异步Actionreturn Content("Async1");}

三、第二种异步Action方式:BeginAction、EndAction方式

如果第一种方式你了解了的话第二种自然也不在话下,不过这种方式是与其它类的异步调用一起使用。

http://www.cnblogs.com/Home/Async2

        public delegate void AsyncEventHandler();//我这里自己声明了一个委托,也可以使用WebRequest/WebResponse/SqlConnection来实现这个异步过程public void Event1(){}public IAsyncResult BeginAsync3(AsyncCallback callback, object state){AsyncEventHandler asy = new AsyncEventHandler(Event1);ViewData["a"]=asy;//这里在方法間传值必须使用辅助存储对象,第一种方法中也是一样return asy.BeginInvoke(callback, state);}public void EndAsync3(IAsyncResult result){
//转到异步的Action中var a = ViewData["a"] as AsyncEventHandler;a.EndInvoke(result);Content("完成").ExecuteResult(this.ControllerContext);}

四、第三种异步Action方式:使用AsyncManager.RegisterTask及委托

如果感觉上面使用2个方法才能实现异步Action有些麻烦的话(也的确是麻烦),可以使用AsyncManager.RegisterTask来调用委托来实现异步调用。

http://www.cnblogs.com/Home/Async3

   public void  Async2(){this.AsyncManager.RegisterTask(c => {//主线程,调用异步线程c(null);}, delegate(IAsyncResult result) {//异步部分               Content("Async2").ExecuteResult(this.ControllerContext);});}

其实无论是哪种方法都感觉不太完美,我个人觉得Action/ActionCompleted的方法可能更优美一点,适合一般使用(只是这三个比较)。只是AsyncManager.RegisterTask的方法传值方便一点,而Begin/End方法更适合与其它异步的操作配合。

当然本文还有肯定还有好多地方没有讲到,包括其它的异步调用方式还有Filter,所以希望朋友们多多讨论。

附老赵2个文章

为ASP.NET MVC扩展异步Action功能(上)

为ASP.NET MVC扩展异步Action功能(下)

我的ASP.NET MVC系列:Asp.net Mvc Framework 系列

转载于:https://www.cnblogs.com/cxd4321/archive/2009/09/12/1565403.html

使用ASP.NET MVC Futures 中的异步Action 【转】相关推荐

  1. 使用ASP.NET MVC Futures 中的异步Action

    在ASP.NET MVC中使用异步是比较麻烦的,从RC1版开始ASP.NET MVC Futures中提供了几个支持异步的类. 相关的类有:AsyncActionDescriptor.AsyncCon ...

  2. ASP.NET MVC什么时候使用异步Action

    在没有使用异步Action之前,在Action内,比如有如下的写法: public ActionResult Index() { CustomerHelper cHelper = new Custom ...

  3. 【初学者指南】在ASP.NET MVC 5中创建GridView

    介绍 在这篇文章中,我们将会学习如何在 ASP.NET MVC 中创建一个 gridview,就像 ASP.NET Web 表单中的 gridview 一样.服务器端和客户端有许多可用的第三方库,这些 ...

  4. 关于ASP.NET MVC P5中CheckBox的HtmlHelper方法的bug。

    在ASP.NET MVC P5中,当你使用这样的方法输出CheckBox:<%=Html.CheckBox("checkTest")%>,在浏览器上除了你期望看到的代码 ...

  5. 在ASP.NET MVC应用中开发插件框架(中英对照)

    [原文] Developing a plugin framework in ASP.NET MVC with medium trust [译文] 在ASP.NET MVC应用中开发一个插件框架 I'v ...

  6. 使用Donut Caching和Donut Hole Caching在ASP.NET MVC应用中缓存页面

    使用Donut Caching和Donut Hole Caching在ASP.NET MVC应用中缓存页面 使用Donut Caching和Donut Hole Caching在ASP.NET MVC ...

  7. 在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图

    在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图 前提介绍 这个文章我们要讨论,在ASP.NET MVC模型的项目中,怎么选择一个最有效的方式来将多个数据模型(m ...

  8. ASP.net mvc开发中使用纯html如何创建FCKeditor编辑器的使用

    http://www.cnblogs.com/esshs/archive/2008/12/03/1346326.html FCKeditor下载路径: http://sourceforge.net/p ...

  9. 在ASP.NET MVC 4中使用Kendo UI Grid

    Kendo UI 是Telerik推出的一套based on jQuery 的 Framework,提供了很多控件(Menu .Grid .Combox等...), 底层以Html5 + jQuery ...

最新文章

  1. 程序员的技能树,决定了一生职业的高度
  2. NASA发现超级地球,真的适宜居住?
  3. 服务器IIS无法提供某种扩展名的文件的下载或访问某种类型文件提示http 404 错误时的解决办法...
  4. luogu P2512 [HAOI2008]糖果传递
  5. [Everyday Mathematics]20150104
  6. CM: Relationship between Note created in Fiori UI and webclient UI
  7. [NOIP2015] 子串
  8. php正则过滤html标签_空格_换行符的代码,PHP 正则过滤 html 标签、空格、换行符的代码 (文章格式化)...
  9. 深入框架本源系列 —— Virtual Dom
  10. 实践解析可视化开发平台FlinkSever优势
  11. 请求到后台百分号被删除原因_接口测试平台代码实现85: 全局请求头1
  12. POJ2139 Six Degrees of Cowvin Bacon【Floyd算法】
  13. Net设计模式实例之桥接模式( Bridge Pattern)(4)
  14. 如何删除拒绝访问的文件
  15. [转]Windows server 2008网络负载均衡集群
  16. w3wp.exe进程资源占用过大问题
  17. opencv打开双目,采集标定双目的图片
  18. idea 编译时提示找不到符号
  19. qdialog修改标题栏图标_qt – 如何在QDockWidget标题栏中显示图标?
  20. java商品管理系统黑马_JavaEE基础班 水果超市管理系统

热门文章

  1. 存到mysql的中文乱码_web项目存数据到数据库,中文乱码,解决过程
  2. 中文文本对齐_终于明白Word如何快速对齐姓名!为之前狂敲空格的我,留下一把泪...
  3. Vue- Markdown 使用大全
  4. Python-英文小说词频统计
  5. 的内怎么放_燕窝买回来怎么炖?资深窝友告诉你!
  6. 全文搜索引擎 Elasticsearch 入门概念
  7. Hive 排序入门--order by与sort by
  8. Spark文本文件输入输出
  9. Ubnutu20.04安装Tensorflow
  10. 说说VNode节点(Vue.js实现) 1