专栏首页哲学驱动设计C# async/await 使用总结

C# async/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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 重构:一个简单的IF语句

    private static void OldMethod(BusinessObjectInfo parentBOInfo) { IList<Busin...

    用户1172223
  • 性能优化总结(六):预加载、聚合SQL应用实例

        前面已经把原理都讲了一遍,这篇主要是给出一个应用的实例。该实例取自GIX4,比较复杂。 领域模型:     领域模型间的关系,如下: ? 右边模型链的具...

    用户1172223
  • Rafy 领域实体框架演示(3) - 快速使用 C/S 架构部署

    本系列演示如何使用 Rafy 领域实体框架快速转换一个传统的三层应用程序,并展示转换完成后,Rafy 带来的新功能。 《福利到!Rafy(原OEA)领域实体框架...

    用户1172223
  • 飞雪无情的博客Go语言、Android相关的十大热门文章

    对于很多人来说,可能不明白我为什么写博客,写博客对于我来说,可能就像大家看电影一样,有时间就看看(写写)。对于我自己也是一些东西的总结,有时候通过写,才能加深理...

    飞雪无情
  • Python Algorithms - C2 The basics

    本节主要介绍了三个内容:算法渐近运行时间的表示方法、六条算法性能评估的经验以及Python中树和图的实现方式。

    宅男潇涧
  • 用一段简单的代码讲述一个程序员悲伤故事?我要讲十个!

    1、刚开始学编程的时候,课堂上老师说的话必须尊为圣旨,老师说“写好注释是一个好的工作习惯”,所以就有了下面的代码,请注意看那一组组工工整整、清清楚楚的12345...

    一墨编程学习
  • hgame智械危机详细解析

    下载下来有一个hdf5文件,应该是出题人训练的存储点,一个txt文件,相当于密文,一个py文件是远程检查结果的脚本

    字节脉搏实验室
  • 如何给程序中的变量起个好名字?

    对一个人来说,名字很重要,俗语说“人如其名”。对程序中的变量而言,名字同样非常重要。

    奋斗蒙
  • 异步IO(一)

    在web2.0的时候,其实前端就很熟悉异步编程了,只不过那时大家使用的是ajax(典型的网络请求)实现的,还有一些前端的事件机制(针对事件定义回调事件)。

    RobinsonZhang
  • 如何提高代码的可读性? - 读《编写可读代码的艺术》

    很多同行在编写代码的时候往往只关注一些宏观上的主题:架构,设计模式,数据结构等等,却忽视了一些更细节上的点:比如变量如何命名与使用,控制流的设计,以及注释的写法...

    用户2932962

扫码关注云+社区

领取腾讯云代金券