在没有使用异步Action之前,在Action内,比如有如下的写法:

public ActionResult Index()
    CustomerHelper cHelper = new CustomerHelper();
Customer> result = cHelper.GetCustomerData();
    return View(result);
}

以上,假设,GetCustomerData方法是调用第三方的服务,整个过程都是同步的,大致是:

→请求来到Index这个Action
→ASP.NET从线程池中抓取一个线程
→执行GetCustomerData方法调用第三方服务,假设持续8秒钟的时间,执行完毕
→渲染Index视图

在执行执行GetCustomerData方法的时候,由于是同步的,这时候无法再从线程池抓取其它线程,只能等到GetCustomerData方法执行完毕。

这时候,可以改善一下整个过程。

→请求来到Index这个Action
→ASP.NET从线程池中抓取一个线程服务于Index这个Action方法
→同时,ASP.NET又从线程池中抓取一个线程服务于GetCustomerData方法
→渲染Index视图,同时获取GetCustomerData方法返回的数据

所以,当涉及到多种请求,比如,一方面是来自客户的请求,一方面需要请求第三方的服务或API,可以考虑使用异步Action。

假设有这样的一个View Model:

public class Customer
    public int Id{get;set;}
    public Name{get;set;}
}

假设使用Entity Framework作为ORM框架。

public class CustomerHelper
	public async Task<List<Customer>> GetCustomerDataAsync()
		MyContenxt db = new MyContext();
					orderby c.Id ascending
					select c;
Customer>	result = awai query.ToListAsycn();
		return result;
}

现在就可以写一个异步Action了。

public async Task<ActionResult> Index()
	CustomerHelper cHelper = new CustomerHelper();
Customer> result = await cHlper.GetCustomerDataAsync();
	return View(result);
}

Index视图和同步的时候相比,并没有什么区别。

@model List<Customer>
{
span>@customer.Name</span>
}

当然,异步还设计到一个操作超时,默认的是45秒,但可以通过AsyncTimeout特性来设置。

[AsyncTimeout(3000)]
ActionResult> Index()
	...
}

如果不想对操作超时设限。

[NoAsyncTimeout]
ActionResult> Index()
	...
}

综上,当涉及到调用第三方服务的时候,就可以考虑使用异步Action。async和await是异步编程的2个关键字,async总和Action成对出现,而在调用异步方法之前要加上await关键字。

ASP.NET MVC什么时候使用异步Action的更多相关文章

  1. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序使用异步及存储过程

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第九篇:为ASP.NET MVC应用程序 ...

  2. ASP.NET MVC应用程序使用异步及存储过程

    ASP.NET MVC应用程序使用异步及存储过程 是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译 ...

  3. ASP.NET MVC 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁

    在开发程序的过程中,稍微不注意就会隐含有sql注入的危险.今天我就来说下,ASP.NET mvc 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁.不用每下地方对参数的值都进行检 ...

  4. [转]ASP.NET MVC中的两个Action之间值的传递--TempData

    本文转自:ASP.NET MVC中的两个Action之间值的传递--TempData 一. ASP.NET MVC中的TempData 在ASP.NET MVC框架的ControllerBase中存在 ...

  5. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  6. Asp.Net MVC<六>:Controller、Action 待续

    控制器 抽象类Controller Visual Studio的向导创建的Controller类型继承自抽象类Controller. 它是ControllerBase的子类. 实现了IControll ...

  7. ASP.NET MVC中的两个Action之间值的传递--TempData

    一. ASP.NET MVC中的TempData 在ASP.NET MVC框架的ControllerBase中存在一个叫做TempData的Property,它的类型为TempDataDictiona ...

  8. ASP.NET MVC EF 中使用异步控制器

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   为什么使用异步操作/线程池 ASP.NET MVC ...

  9. ASP.NET MVC 学习笔记-6.异步控制器

    1)         异步控制器的由来 对于IIS,它维护了一个.NET线程池来处理客户端请求,这个线程池称为工作线程池,其中的线程称为工作线程.当IIS接收到一个请求时,需要从工作线程池中唤醒一个工 ...

随机推荐

  1. 用Canvas实现一些简单的图片滤镜

    1.灰度滤镜 对于灰度滤镜的实现一般有三种算法 1) 最大值法:即新的颜色值R=G=B=Max(R,G,B),通过这种方法处理后的图片看起来亮度值偏高. 2) 平均值法:即新的颜色值R=G=B=(R+ ...

  2. thymeleaf 引入公共html注意事项

    详细连接https://blog.csdn.net/u010260737/article/details/83616998 每个页面都会用到分页.html或者头部.html.尾部.html,在其他页面 ...

  3. druid 连接Oracle时出现的错误

    转博主https://blog.csdn.net/jiangyu1013/article/details/70237550#commentsedit mysql 更新 SQL 语句 无错误 批量 报错 ...

  4. python之路--操作系统介绍,进程的创建

    一 .  操作系统的作用: 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理.调度进程,并且将多个进程对硬件的竞争变得有序 二 多道技术: 所谓多道程序设计技术,就是指允许多个程序同时进入内存 ...

  5. DNS 到底怎么工作的? (How does dns work?)

    其实这个问题每次看的时候都觉得很明白,但是很久之后就忘记了,所以这次准备记录下来.深入到这个过程的各个细节之中,以后多看看. Step 1 请求缓存信息: 当你在开始访问一个 www.baidu.co ...

  6. Delphi之TStrings和TStringLists类

    Delphi之TStrings和TStringLists类 有些类不是组件,但它们支持存在的组件.这些类是其他组件的典型属性,直接由TPersistent派生,如TStrings.TCanvas和TC ...

  7. Ubuntu16.04网络不能访问解决办法

      问题: 系统重启后,网络不能正常使用,加载网络配置失败,且重启网络时也提示错误. 解决方法: 在定位的过程中发现是配置中的网络设备号与实际设备号不符. 1.查看网络配置中的配备号: vi /etc ...

  8. VM磁盘映射共享方法,要求文件系统必须一致

    如果主机是window系统,那么虚拟机也应该是Windows系统,不然不起作用

  9. C# 电脑上提示未知发布者

    参考6楼:http://tieba.baidu.com/p/5767451198?pid=120504172126&cid=120504203560#120504203560 解决方案:mak ...

  10. Quartz基础+实例

    1. 介绍 Quartz体系结构: 明白Quartz怎么用,首先要了解Scheduler(调度器).Job(任务)和Trigger(触发器)这3个核心的概念. 1. Job: 是一个接口,只定义一个方 ...