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. 从头开始学Maven【仓库】

    仓库的分类 本地仓库 改setting.xml 文件中的 <localRepository/> 远程仓库 远程仓库的配置 远程仓库的认证 部署至远程仓库 中央仓库 在$M2_HOME/li ...

  2. tp5.1入口文件隐藏

    修改.htaccess文件 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On Re ...

  3. python实现JWT

    python实现JWT 一.常见的几种实现认证的方法 1.1basic auth 1.2cookie 1.3token json web token--一种基于token的json格式web认证方法. ...

  4. 末学者笔记--shell编程上 2 玄

    Shell编程-变量及表达运算 [内容简列] 1. shell变量简介 2. 定义变量 3. 使用变量 4. 修改变量的值 5. 单引号和双引号的区别 6. 将命令的结果赋值给变量 7. 删除变量 8 ...

  5. 做ctf题对malloc的疑问

    做cctf pwn printf题目的时候 疑问为什么dir函数会将之前out的name倒叙输出 调试了一下发现当malloc(0xf4)大小时候,例如 第一次分配0x1000的地址,将名字输入到0x ...

  6. ***ThinkPHP中的常用方法汇总总结:M方法,D方法,U方法,I方法

    thinkPHP中M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法 ...

  7. James Munkres Topology: Lemma 21.2 The sequence lemma

    Lemma 21.2 (The sequence lemma) Let \(X\) be a topological space; let \(A \subset X\). If there is a ...

  8. Aspnet Core 对 Resetful API版本的支持

    在实际项目过程中API往往会收到迭代的影响,同时具备多个版本,因此resetful接口的版本话是非常重要的. 其实官方就提供了很好的支持,微软爸爸在nuget提供了Microsoft.AspNetCo ...

  9. pyspark如何遍历broadcast

    因为论文关系要用到pyspark,具体情形如下: 有一个list=['aaa','bbb','ccc','ddd'],然后有一个rdd内数据类型是str,eg:'abcdefg',正常如果是需要筛选数 ...

  10. redis深入了解

    来自:https://www.cnblogs.com/lixinjie/p/a-key-point-of-redis-in-interview.html 是数据结构而非类型 很多文章都会说,redis ...