1.如果一个方法标记了 async 关键字,那么这个方法被调用时就是异步执行;
2.利用Task运行一个任务,这个任务里的函数也是异步执行;
3.如果一个任务前被标记await,那么等待这个任务执行完成后,才能执行后面的语句, 这是一个同步等待异步过程,因为如果函数要返回任务值,就必须等任务完成。

  

4.async 和 超线程区别
async 是为了编写更方便,.net4.5前可使用 BeginInvoke和EndInvoke
举个抽象的例子:
4.1 如果你计算机坏了,自己拿去修理,修理计算机需要时间,你守着修理工程师直到修理完毕,工程师把修好的计算机交给你,你取回修好的计算机,这一连串的过程,你时间一直花费在修理计算机这件事上,这叫同步执行。
4.2 还是修理计算机,你把计算机交给维修工程师,留下电话后,就离开做其它事情去了; 维修工程师修好后便再知你去取计算机,你去取回计算机, 这就相当于异步。
4.3你计算机坏了,但是不自己拿去修,而是通知其他人拿去给你修,修好后,别人在帮你拿回去交给你,这就相当于超线程。
第一种情况(sync): 从计算机坏了到计算机被修好再到你取回计算机,你的时间一直被修计算机这件事占用着,直到计算机取回后你才能有时间做其它事。
第二种情况(async):你把计算机交给工程师后,相当于给了工程师一个任务(task),工程师完成任务这段时间,你可以做任何事情,工程师完成任务后,会主动通知你任务完成,让你接手,你接手后时间才会重新花费到修理计算机这件事上。
第三种情况(multiThread): 从头到尾你做的事只是让别人给你做事, 你花费的时间只有交出电脑,收回电脑;好像比async更节省时间?no!让你别人给你做事你就得付出更多的成本;反映到os里就是系统会花费资源去创建新线程和销毁线程,创建/销毁新线程都会花费时间,内存,cpu成本,
而且os线程也不是无限的。

  

async/await 的理解的更多相关文章

  1. async/await 深度理解使用

    在vue中使用 eg async created () { await setTimeout(()=>{ console.log(1) },5000); }, async mounted () ...

  2. 关于异步执行(Async/await)的理解(转发)

    原文地址: http://blog.jobbole.com/85787/ 同步编程与异步编程 通常情况下,我们写的C#代码就是同步的,运行在同一个线程中,从程序的第一行代码到最后一句代码顺序执行.而异 ...

  3. async/await到底该怎么用?如何理解多线程与异步之间的关系?

    前言 如标题所诉,本文主要是解决是什么,怎么用的问题,然后会说明为什么这么用.因为我发现很多萌新都会对之类的问题产生疑惑,包括我最初的我,网络上的博客大多知识零散,刚开始看相关博文的时候,就这样.然后 ...

  4. 理解C#中的 async await

    前言 一个老掉牙的话题,园子里的相关优秀文章已经有很多了,我写这篇文章完全是想以自己的思维方式来谈一谈自己的理解.(PS:文中涉及到了大量反编译源码,需要静下心来细细品味) 从简单开始 为了更容易理解 ...

  5. 你眼中的async/await是什么样的?

    又到了周末的code review环节,这次code review发现了一个对async/await的理解问题.让我们直奔主题: var foodsSearch = new FoodSearchSer ...

  6. 8张图让你一步步看清 async/await 和 promise 的执行顺序

    摘要: 面试必问 原文:8张图帮你一步步看清 async/await 和 promise 的执行顺序 作者:ziwei3749 Fundebug经授权转载,版权归原作者所有. 为什么写这篇文章? 说实 ...

  7. 8 张图帮你一步步看清 async/await 和 promise 的执行顺序(转)

    https://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651555491&idx=1&sn=73779f84c289d9 ...

  8. js async await 终极异步解决方案

    既然有了promise 为什么还要有async await ? 当然是promise 也不是完美的异步解决方案,而 async await 的写法看起来更加简单且容易理解. 回顾 Promise Pr ...

  9. [转] js async await 终极异步解决方案

    阅读目录 回顾 Promise async await 字面理解 async.await 如何执行 await 操作符 总结 既然有了promise 为什么还要有async await ? 当然是pr ...

随机推荐

  1. 如何获取AWS的Access Key ID 和 Secret Access Key (Unable to find credentials)

    获取AWS的Access Key ID 和 Secret Access Key 是你可以访问AWS的依据,比如S3的“使用预签名 URL 上传对象”. 1.登录AWS控制台 2.在“AWS servi ...

  2. Django—第三方引用

    索引 一.富文本编辑器 1.1 在Admin中使用 1.2 自定义使用 1.3 显示 二.全文检索 2.1 创建引擎及索引 2.2 使用 三.发送邮件 一.富文本编辑器 借助富文本编辑器,网站的编辑人 ...

  3. 部署lamp动态网站(图解)

    环境拓扑如下:1.两台虚拟机要互通   2.修改selinux   +++++++++++++++++++++++++++服务器133上: 1.安装需要的组件httpd,mariadb,php   2 ...

  4. JAVA BigDecimal 用法

    一.BigDecimal 的加减乘除 BigDecimal bignum1 = new BigDecimal("10"); BigDecimal bignum2 = new Big ...

  5. ansible的modules

    fetch   :从远端服务器拉取文件到本地 dest 依赖   本地存放拉取到的文件路径, 如果flat=yes,则会在该路径下直接存放文件, 如果flat=no,则会在该路径下生成每个服务器的in ...

  6. 「JOISC 2018 Day 3」比太郎的聚会

    题解: 很套路的题目 我们按照询问中的不算的个数是否大于$block$分类 如果大于,就$O(n)dp$一下 如果小于,就预处理出到每个点前$block$小的点 $block取\sqrt{n}$的话复 ...

  7. Linux禁止普通用户su至root

    linux系统为了限制权限,有时候需要禁止普通用户su到root用户 为禁止普通用户su至root,需要分别修改/etc/pam.d/su和/etc/login.defs两个配置文件. 二.详细配置 ...

  8. stylus 样式

  9. pycharm 记录

    一.pycharm字体放大.缩小的设置 File —> setting —> Keymap —>在搜寻框中输入:increase —> Increase Font Size(双 ...

  10. SQL 收缩日志

    USE [master]ALTER DATABASE RcBalance SET RECOVERY SIMPLE WITH NO_WAITALTER DATABASE RcBalance SET RE ...