.NET4.5新特性async和await修饰符实现异步编程
开篇
每一个版本的.net都会引入一些新的特性,这些特性方便开发人员能够快速实现一些功能。虽然.net版本一直在更新,但是新版本对旧版本的程序都是兼容的,在这一点上微软做的还是非常好的。每次学一个新内容,第一次接触的方法在脑海里占的位置还是比较重要的,从刚开始接触.net的多线程编程是使用Thread类,然后后面写的程序只要用到异步或者多线程就马上会想到用Thread,虽然知道委托的异步调用也能够实现,但是脑海里面的排在前面还是Thread类,在那个时候不知道他们之间的区别和优劣,也就不懂得如何去取舍。到了.net4.0引入了Task这个任务类,让我们用少量的代码就开始实现了多线程编程,从这个时候开始我也慢慢的了解了.net里面的有哪一些异步实现的方式以及多线程内部的一些机制,也知道它们各自的优势。在接触Task类的时候.net4.5也发布出来了,并且带来一个更加方便的关键字(async,await),轻松实现函数异步调用。虽然知道async和await修饰符,但是自己却迟迟没有接触,因为平常的工作中使用Task类就基本能实现我想要的效果。最近看了一些源码,源码中有很多代码是应用了async和await的关键字来实现异步的,所以我也不得不去学习,接触之后发现,使用async和await关键字确实简化了以前异步编程所需要的步骤,也比较好理解。下面通过一些小例子来简述async和await修饰符如何实现异步编程以及和以前使用Task类来实现异步编程的少许区别。另外,关于.net4.0(包含)以前的的异步编程模式可以参考我的另外一篇博文:http://www.cnblogs.com/mingjiatang/p/5267391.html
1 async和await实现方法异步调用
static void Main(string[] args)
{
AsyncMethod(10);//no.1
Console.WriteLine("执行其他的东西,当前线程id:{0}", Thread.CurrentThread.ManagedThreadId);//out.4
Console.ReadKey(); } static async void AsyncMethod(int i)
{
Console.WriteLine("异步方法开始,当前线程id:{0}",Thread.CurrentThread.ManagedThreadId);//out.1
await AsyncTaskMethod(i);//no.3
Console.WriteLine("异步方法退出,当前线程id:{0}", Thread.CurrentThread.ManagedThreadId);////out.6
} public static async Task<int> AsyncTaskMethod(int i)
{
Console.WriteLine("【任务】开始,当前线程id:{0}", Thread.CurrentThread.ManagedThreadId);//out.2
Task<int> t = Task.Run(() =>
{ Console.WriteLine("【任务】正在执行,执行任务的线程id:{0}", i, Thread.CurrentThread.ManagedThreadId);//out.3
Thread.Sleep(2000);
return i;
});//no.4 int r= await t;//no.5
Console.WriteLine("【任务】执行完成,当前线程id:{0}", i, Thread.CurrentThread.ManagedThreadId);//out.5
return r;
}
下面是执行结果:

小结
1、异步的方法(包括匿名方法,和lambda表达式)必须要使用async修饰2、异步方法可以具有返回类型的 void, Task,或 Task< TResult> 。该方法不能声明任何 ref 或 出参数,尽管它可以调用具有此类参数的方法。其中返回值为TRsult时,返回类型就是 Task< TResult>。3、await 运算符应用于一个异步方法的任务挂起方法的执行,直到等待任务完成。 任务表示正在进行的工作。4、await 表达式不阻止调用它的线程。 当任务完成时,将会调用其延续任务,并且,异步方法的执行恢复它将会停止的位置。换句话说就是:await会让当前方法等待Task执行完毕再执行。
.NET4.5新特性async和await修饰符实现异步编程的更多相关文章
- 四、C# 5.0 新特性——Async和Await使异步编程更简单
一.引言 .NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就 ...
- 【转】【C#】C# 5.0 新特性——Async和Await使异步编程更简单
一.引言 在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.0中主要的特性,然而.NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两 ...
- 转:[你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单 async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...
- [你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单 async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...
- async和await是如何实现异步编程?
目录 异步编程样例 样例解析 浅谈Promise如何实现异步执行 参考 1.异步编程样例 样例: // 等待执行函数 function sleep(timeout) { return new Prom ...
- C# 5.0 新特性——Async和Await使异步编程更简单
http://www.cnblogs.com/zhili/archive/2013/05/15/csharp5asyncandawait.html http://blog.zhaojie.me/201 ...
- 使用ES6新特性async await进行异步处理
我们往往在项目中会遇到这样的业务需求,就是首先先进行一个ajax请求,然后再进行下一个ajax请求,而下一个请求需要使用上一个请求得到的数据,请求少了还好说,如果多了,就要一层一层的嵌套,就好像有点c ...
- 转 .NET4.5之初识async与await
来自:http://www.cnblogs.com/lekko/archive/2013/03/05/2944282.html 本人是从.NET4.0刚出的时候接触的.NET环境,所以学的东西就是4. ...
- NET4.5之初识async与await
这是两个关键字,用于异步编程.我们传统的异步编程方式一般是Thread.ThreadPool.BeginXXX.EndXXX等等.把调用.回调分开来,代码的逻辑是有跳跃的,于是会导致思路不是很清晰的问 ...
随机推荐
- Elasticsearch-搜索推荐
对于es中搜索推荐的功能的实现: 1.使用match_phrase_prefix来实现search-time搜索推荐,原理根match_phrase类似,唯一的区别是把最后一个term作为前缀去搜索, ...
- Python 去除列表中重复的元素
Python 去除列表中重复的元素 来自比较容易记忆的是用内置的set l1 = ['b','c','d','b','c','a','a'] l2 = list(set(l1)) print l2 还 ...
- (转)ReentrantLock可重入锁的使用场景
原文: http://my.oschina.net/noahxiao/blog/101558
- js之global 对象 方法
global 作为js的全局对象,但其是无法直接访问的,但是在浏览器中浏览器是将这个对象当做是window对象的一部分,即Date 等Global的属性使用window.Date 可访问到 1.url ...
- h5移动端聊天室|仿微信界面聊天室|h5多人聊天室
今年的FIFA世界杯甚是精彩,最近兴致高涨就利用HTML5开发了一个手机端仿微信界面聊天室,该h5聊天室采用750px全新伸缩flex布局,以及使用rem响应式配合fontsize.js,页面弹窗则是 ...
- csc命令
CSC.exe把Visual C#程序代码编译成IL文件时,有着很多参数和开关选项.正确的了解和运用这些参数和开关有时会解 决一些看似很棘手的问题.下面就通过一张表来大致说明一下这些参数和开关的具体作 ...
- css网页布局 --- 左边固定,右边自适应
div的布局统一如下: <body> <div class="wrap"> <div class="left"></d ...
- 【链表】Sort List(归并排序)
题目: Sort a linked list in O(n log n) time using constant space complexity. 思路: nlogn的排序有快速排序.归并排序.堆排 ...
- traefik+etcd构建grpc微服务demo
1.下载安装traefik https://github.com/containous/traefik/releases 2.下载安装etcd3 https://github.com/coreos/e ...
- 【BI】资料收集
从无到有--什么是BI 什么是BI(Business Intelligence) - @我爱菊花 - 博客园 http://www.cnblogs.com/jiesin/archive/2008/06 ...