本篇的内容大部分来自于同事的邮件描述,本想本身用言简意赅的用语言转述,无奈语言水平有限,且同事的介绍也是极尽详细和明了,故再也不多此一举,直接引述....数据库
经过使用异步编程,你能够避免性能瓶颈并加强应用程序的整体响应能力。可是,编写异步应用程序的传统技术可能比较复杂,使它们难以编写、调试和维护。编程
Visual Studio 2012 引入了一个简化的方法,异步编程,在 .NET Framework 4.5 和 Windows 运行时利用异步支持。 编译器可执行开发人员曾进行的高难度工做,且应用程序保留了一个相似于同步代码的逻辑结构。所以,你只需作一小部分工做就能够得到异步编程的全部好处。并发
拿我如今作的项目来讲,主要是写WebAPI,其中一些接口中返回值的处理尤为复杂,如:须要在几个数据源中拿数据,而后可能还要根据业务进行大数据的处理和分析等等,执行效率就变得没那么快了,且这些操做都是同步完成的,包括一些占用资源的操做,若是有多个WebApi请求并发时,IIS处理请求的线程池就会被这个消耗资源的操做(好比访问数据库、或者请求别的服务)所占,在操做完成前线程不释放,IIS线程池可用性下降。app
而后我的又特懒,并不想写那些传统的异步实现方式,无心间看到同事的推荐,甚为惊讶,这尼玛异步实现得也太简单了吧,因而忍不住想向各位分享一番!!异步
示例以下:async
1.原代码,同步处理异步编程
[HttpGet]性能
public HotelListResponse List(…大数据
{ui
…
//方法内部有很多数据获取和处理的操做,暂不一一贴出
result = HotelBusiness.Instance.QueryHotelList(parameter); // 阻塞IIS线程
return result;
}
2.只加了几个关键字,就变成了异步处理方式
[HttpGet]
public async Task<HotelListResponse> List(…
{
…
return await Task.Factory.StartNew(() => HotelBusiness.Instance.QueryHotelList(parameter)); // 资源消耗的操做,移到了异步上
}
3.修改以后的代码运行时,有请求进来时当前的IIS线程ID是9
4.消耗资源的操做,是在另一个线程上运行,并无占用IIS处理该请求的线程
关于使用 Async 和 Await 的异步编程
这里主要是使用了async和await的关键字,是.net 4.5新特性,请参考
Asynchronous Programming with Async and Await (C# and Visual Basic)
URL: https://msdn.microsoft.com/en-us/library/hh191443.aspx
URL: https://msdn.microsoft.com/zh-cn/library/hh191443.aspx (中文翻译版)
我也是才开通的博客,亦是第一次写博客,若有不足之处,欢迎各位大神批评指正,若有不一样见地,不妨在下方写一下,不胜感谢!