C# async/await 使用总结
2015-05-12 21:42
603 查看
今天搞这两个关键字搞得有点晕,主要还是没有彻底理解其中的原理。
混淆了一个调用异步方法的概念:
在调用异步方法时,虽然方法返回一个 Task,但是其中的代码已经开始执行。该方法在调用时,即刻执行了一部分代码,直接最底层的 Async API 处才产生真正的异步操作,这时向上逐步返回,并最终使用一个 Task 来代表该异步任务。
当不使用 await 关键字时,该异步方法同样在异步执行。而使用 await 关键字后,只不过是对 Task(awaitable) 对象异步等待其执行结束,然后再同上下文中执行后续代码。
如果使用 await task.ConfigureAwait(false),表示该行后的代码,都不需要一定在同一上下文中执行。
也就是说,对于 Task Run() 的调用来说:
1. RunAsync():直接执行该异步方法,后续代码紧接着执行。
2. await RunAsync():执行异步方法,并在结束后再执行后续代码(在此行代码之前的代码在同一线程中执行)。
3. await RunAsync().ConfigureAwait(false):执行异步方法,并在结束后再执行后续代码(执行的线程不指定)。
Await 的使用
另外,由于 await 只针对 awaitable 对象,所以并不要求一定要在异步方法之前使用。可以在适当的时候再使用 await,例如:
var task = RunAsync();//开始执行异步操作。
DoSth();//同时主线程执行其它操作。
await task;//此时等待异步执行完成。
DoOtherThing();//再执行其它操作。
参考:
下面,列出几篇 async await 相关的文章
dudu:实际案例:在现有代码中通过async/await实现并行
有关async/await的实现背后
在MVC中使用async和await的说明
async & await 的前世今生(Updated)
C# 5.0 Async Tips and Tricks, Part 1
Async and Await
混淆了一个调用异步方法的概念:
在调用异步方法时,虽然方法返回一个 Task,但是其中的代码已经开始执行。该方法在调用时,即刻执行了一部分代码,直接最底层的 Async API 处才产生真正的异步操作,这时向上逐步返回,并最终使用一个 Task 来代表该异步任务。
当不使用 await 关键字时,该异步方法同样在异步执行。而使用 await 关键字后,只不过是对 Task(awaitable) 对象异步等待其执行结束,然后再同上下文中执行后续代码。
如果使用 await task.ConfigureAwait(false),表示该行后的代码,都不需要一定在同一上下文中执行。
也就是说,对于 Task Run() 的调用来说:
1. RunAsync():直接执行该异步方法,后续代码紧接着执行。
2. await RunAsync():执行异步方法,并在结束后再执行后续代码(在此行代码之前的代码在同一线程中执行)。
3. await RunAsync().ConfigureAwait(false):执行异步方法,并在结束后再执行后续代码(执行的线程不指定)。
Await 的使用
另外,由于 await 只针对 awaitable 对象,所以并不要求一定要在异步方法之前使用。可以在适当的时候再使用 await,例如:
var task = RunAsync();//开始执行异步操作。
DoSth();//同时主线程执行其它操作。
await task;//此时等待异步执行完成。
DoOtherThing();//再执行其它操作。
参考:
下面,列出几篇 async await 相关的文章
dudu:实际案例:在现有代码中通过async/await实现并行
有关async/await的实现背后
在MVC中使用async和await的说明
async & await 的前世今生(Updated)
C# 5.0 Async Tips and Tricks, Part 1
Async and Await
相关文章推荐
- C# async/await 使用总结
- C# Async与Await的使用
- C# Task中的Func, Action, Async与Await的使用
- await和async在C#一般处理程序(ashx)中的使用
- 【C#复习总结】 Async 和 Await 的异步编程
- C#语法——泛型的多种应用 C#语法——await与async的正确打开方式 C#线程安全使用(五) C#语法——元组类型 好好耕耘 redis和memcached的区别
- 演示C#里的async和await的使用
- [C#] .NET4.0中使用4.5中的 async/await 功能实现异步
- .NET/C# 使用async和await关键字调用异步方法
- 使用Async和Await进行异步编程(C#版 适用于VS2015)
- 使用Async和Await进行异步编程(C#版 适用于VS2015) z
- 使用 Async 和 Await 的异步编程(C# 和 Visual Basic)[msdn.microsoft.com]
- C# Async与Await的使用
- [C#] .NET4.0中使用4.5中的 async/await 功能实现异
- 【TypeScript】如何在TypeScript中使用async/await,让你的代码更像C#。
- [C#] .NET4.0中使用4.5中的 async/await 功能实现异步
- C# Async与Await的使用
- C#的多线程——使用async和await来完成异步编程(Asynchronous Programming with async and await)
- C# Async与Await的使用
- C# Task中的Func, Action, Async与Await的使用