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. Ipa 脱壳工具 Clutch dumpdecrypted 使用

    1  Clutch 使用 下载地址 : https://github.com/kjcracks/clutch/releases 下载之后去掉去掉版本号 拖入手机的 /usr/bin/ 目录下 执行 c ...

  2. 个人版整理APP测试流程

    2016.1.5 我的笔记 一 .APP测试基本流程  1.1 测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试 ...

  3. SignalR在Asp.NetCore中的使用

    SignalR简介 ASP.NET SignalR是为ASP.NET 开发人员提供的一个库,旨在为你的Web应用迅速简便的添加实时通信功能.这个Web通信功能是指:客户端可以实时从服务端代码拉取数据, ...

  4. JavaFX 记录刚刚接触JavaFX遇到的问题

    操作系统:Windows 10 x64 工具1:Eclipse Java EE IDE for Web Developers. Version: Photon Release (4.8.0) JDK: ...

  5. 单机MongoD搭建

    MongoD 安装 1 .下载地址: wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.8.tgz 2 .添加 ...

  6. CF1093

    题解: D: 比较显然这个图得是二分图才行 然后每个二分图上的方案是$(2^a+2^b) (a,b是两种颜色的个数)$ E: 我tm就不该先写bitset的 正解和bitset都很好想 因为是个排列, ...

  7. flask权限控制

    大概思路为通过管理员id的查询角色,然后查看相应权限,为列表类型,然后通过id查询对应的路由规则,进而得出结论得出是否具有该权限 具体代码: def admin_auth(f): @wraps(f) ...

  8. SpringCloud使用Sofa-lookout监控(基于Eureka)

    本文介绍SpringCloud使用Sofa-lookout,基于Eureka服务发现. 1.前景 本文属于是前几篇文章的后续,其实一开始感觉这个没有什么必要写的,但是最近一个朋友问我关于这个的问题,所 ...

  9. json转化技巧

    如果用户是一级下拉菜单,二级联动,动态加载内容到二级菜单,并在下方内容处,随着用户选择的内容动态加载相应内容. 实现的方法其实很简单 select部分:一级菜单选择内容,ajax动态加载,因为内容固定 ...

  10. apache设置跨域请求

    <VirtualHost *:8888> DocumentRoot D:/xampp/htdocs/bss/ ServerName ims.drcloud.cn ErrorLog &quo ...