在抛弃了对.NET 3的支持之后, ASP.NET MVC 4 彻底拥抱了Task类库, 你不需要再蛋疼的给每个Action写两个方法, 也无需傻傻的手动对异步Action计数器增减了(AsyncManager.OutstandingOperations.Increment()), 现在的你只需拿起手指, 轻轻敲几下, 其他的事情都由系统帮你完成

public class PortalController : AsyncController
{public Task<ViewResult> News( string city)     {return Task.Factory.StartNew(() =>  RunThread(city)).ContinueWith(t =>{return View(new ViewStringModel(){Text = t.Result});});}private string  RunThread(string input){Thread.Sleep(5000);return input;}}

是不是好多了?Lamda可以让一切更爽

public Task<ViewResult> News(string city) {return Task.Factory.StartNew(() => RunThread(city)).ContinueWith(t => View(new  ViewStringModel{ Text = t.Result }));}

那么, 是不是到这里就要说再见了呢? 不是的, 请继续往下看

伟大的async/await

虽然还未到正式发布的时候, 不过如果我们跟着微软的目光往前更进一步, 在ASP.NET和C# 5中, 或者我们从这里可以给.NET 4增加Async 的功能, 在有了async和await这两个关键词之后, 异步编码就更简单啦, 这其中也包括异步控制器的相关操作:

public class PortalController : AsyncController {public async Task<ViewResult> News(string city){return View(new  ViewStringModel(){                             Text = await NewThread(city)});}      private async Task<string> NewThread(string input)    {         Thread.Sleep(5000);         return input; } }

总结

由于有了async和await关键字以及Task类库的帮助, 在可预见的未来里, 我们操作异步控制器就可以像操作普通的控制器一样了, 但就像其他的众多新增的.NET特性一样, 能力越大, 责任也就越大, 方便也往往意味着滥用. 异步控制器固然好, 但也并非每种场合都适合用它, 不恰当的使用它往往会导致服务器需要在不同的线程之间切换, 而这也带来了更多额外的开销. 在开发领域, 我们尤其要注意性能往往比其他任何东西都重要, 因此, 请在确实能提高性能和用户相应的情况下使用异步控制器

转载于:https://www.cnblogs.com/li150dan/p/9712908.html

ASP.NET MVC4中的异步控制器相关推荐

  1. mvc4 html.dropdownlist,ASP.NET MVC4中使用Html.DropDownListFor的方法示例

    本文实例讲述了ASP.NET MVC4中使用Html.DropDownListFor的方法.分享给大家供大家参考,具体如下: 一.控制器部分: public ActionResult PageDeta ...

  2. mvc html.dropdownlist,ASP.NET MVC4中使用Html.DropDownListFor的方法示例

    本文实例讲述了ASP.NET MVC4中使用Html.DropDownListFor的方法.分享给大家供大家参考,具体如下: 一.控制器部分: public ActionResult PageDeta ...

  3. ASP.NET MVC4中调用WEB API的四个方法

    当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各种客户端去使用服务已经是十分普遍的做法.就.NET而言,目前提供了Remoting,WebService和WCF服务,这都能开发出功能十分强 ...

  4. ASP.NET MVC4中@model使用多个类型实例的方法

    有时需要在ASP.NET MVC4的视图的@model中使用多个类型的实例,.NET Framework 4.0版本引入的System.Tuple类可以轻松满足这个需求. 假设Person和Produ ...

  5. [转]ASP.NET MVC4中@model使用多个类型实例的方法

    本文转自:http://blog.csdn.net/hulihui/article/details/48199897 有时需要在ASP.NET MVC4的视图的@model中使用多个类型的实例,.NE ...

  6. 如何在ASP.NET页面中使用异步任务(PageAsyncTask)

    在页面加载期间,可能有些操作是要比较耗用时间的(例如调用外部资源,要长时间等待其返回),正常情况下,这个操作将一直占用线程.而大家知道,ASP.NET在服务端线程池中的线程数是有限的,如果一直占用的话 ...

  7. 使用asp.net MVC4中的Bundle遇到的问题及解决办法

    背景 之前有过使用MVC3的经验,也建过MVC4的基本样例看过,知道有bundle这么一个方法. 近日想建个网站使用MVC4,但是我觉得在基本样例上改不好,有太多无用的东西,所以就建了一个空白的MVC ...

  8. Asp.net MVC中如何获取控制器的名称

    如果在代码中 当前controller.action的获取 RouteData.Route.GetRouteData(this.HttpContext).Values["controller ...

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

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

最新文章

  1. vue.js+socket.io打造一个好玩的新闻社区
  2. mysql 定时计划_MYSQL定时任务
  3. java 接口的泛型方法_Java泛型/泛型方法/通配符/泛型接口/泛型泛型擦出
  4. python数字的鲁棒输入_请教关于python的手写数字识别神经网络问题~~~~
  5. 施工日志管理软件app_工程人必备的手机APP,个个能解燃眉之急
  6. PMCAFF《产品经理第一课》第三期开始报名!天团导师再次升级,631培训模式升级...
  7. Python中菱形继承的MRO顺序及property属性
  8. Python 元组tuple - Python零基础入门教程
  9. 空间组网(卫星组网)概述
  10. emacs php 支持,emacs支持golang吗
  11. 【Java】程序调试
  12. php工具箱的mysql服务_解决php工具箱(phpStudy)Apache启动成功,MySql无法启动的问题...
  13. Oracle创建上下文 SYS_CONTEXT
  14. 泛微 - eteams
  15. 重聚焦显微镜原理和理解
  16. 程序员眼中的中国传统文化_王阳明《传习录》2
  17. java中比例尺,地图比例尺换算原理
  18. 从开发应用的角度来看,物联网的关键技术包括哪几个方面?
  19. linux 终止作业任务命令,Linux中作业控制命令
  20. 家里的网络太慢了,怎么办?

热门文章

  1. 修复python命令行下接收不到参数的问题
  2. Codevs 3342 绿色通道
  3. 查看Mysql实时执行的Sql语句
  4. Asp.net高效导出excel篇之Aspose导出excel
  5. RN性能优化以及事件监听
  6. 小程序本地图片偶尔加载不出来_小程序优化的20中策略
  7. CCF CSP202006-1 线性分类器
  8. 力扣 数组的相对排序
  9. 医保要交多少年可以享受终身?医保断交2年有什么影响?
  10. 川菜中,你觉得哪道菜能称为“经典之菜”呢?