前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# async/await 使用总结

C# async/await 使用总结

作者头像
用户1172223
发布2018-01-26 17:16:53
1K0
发布2018-01-26 17:16:53
举报
文章被收录于专栏:哲学驱动设计哲学驱动设计

今天搞这两个关键字搞得有点晕,主要还是没有彻底理解其中的原理。

混淆了一个调用异步方法的概念:

在调用异步方法时,虽然方法返回一个 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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-05-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档