await : 等待的意思

async:异步(非同步)

当我们方法内部   存在await的时候,就返回出去 执行下一步 ,等await后面的方法执行完毕 在执行await下面的方法

一、我们先看正常的同步操作:

二、加async await异步操作(也就是说 在执行标记async 的方法 DoWorkAsync 方法的时候 如果 内部有await 则return出去 执行调用DoWorkAsync的下一步 .等待await 方法()执行完毕 ,则进入DoWorkAsync方法里执行下一步)

注意:async await并不会新开线程

三、返回值为Task<T> 很好理解 异步有返回值   有人说你这里为什么顺序执行,还记得第一步说的呢 await就会return出去 我的下面是一个readline 所以会阻塞线程

什么意思? 也就是说使用await 并不会一定执行异步~ 正如我们第一点所说 await 不开启新的线程

如果我们取消了await   可以看到  在我们的内部DoWorkAsync 是异步执行,因为有返回值 所以我们的第三步输出,第五步拿到返回值才会输出出来

四、async Task 和async Void的区别?

很简单~  Task任务嘛

如果你想获取到DoWorkAsync的任务执行情况,那就返回Task 如果你只是想异步执行,而不关心DoWorkAsync的任务完成情况 可以使用void  一般用于事件处理程序 尽量不要在其他方法使用(有可能存在报错 异常)

第五步:总结

1.async await 并不开启新的线程

2.async await并不一定是异步执行(主线程阻塞,线程池没有线程 就会同步执行,否则则异步执行)

3.遇到await 我们就要想到return出去 往下面走  await 方法()   等待该方法的完成

在简单点 await就是  遇到了 挂起该操作(注意挂起的不是await 而是async的方法  挂起时候释放当前线程) 不往下面执行,等待 await 后面的 方法()执行完毕  在执行await下面的代码()

用途:

      以下是编写代码前应考虑的两个问题:

  1. 你的代码是否会“等待”某些内容,例如数据库中的数据?

    如果答案为“是”,则你的工作是 I/O 绑定。     (则使用async await 而不是Task.run)

  2. 你的代码是否要执行开销巨大的计算?

    如果答案为“是”,则你的工作是 CPU 绑定,并且你重视响应能力  请使用 async 和 await,但在另一个线程上使用 Task.Run 生成工作

所以个人理解 :当你去要做某事的时候   await就是让你做出改变的事情,比如你最终目的是蒸米把米放入碗中   当你准备蒸米,洗米放入锅中加工的时候  await 做出改变  这个时候你可以去洗菜 当你米蒸好了 打开锅盖 放入碗中  结束 

(个人 也就是 你是单线程的)

在理解下哦   

同步:    蒸米(20分钟)------洗水果(10分钟)---洗菜(10分钟)-----炒菜(20分钟) -----(共计60分钟)

异步: 蒸米(20分钟)----await做出改变(洗水果) --------洗菜(10分钟)-----炒菜(20分钟) -----(共计50分钟)

压缩异步: 蒸米(20分钟)----await做出改变(洗水果----await做出改变 洗菜)-----炒菜(20分钟) -----(共计40分钟)

 补充:Task.Run 不一定启动新的线程 ,取决于当前线程池的数量 ,和任务状态

如果一定要 启动新的线程 Task.Factory.StartNew使用这个 

简单的模型

使用 Async和 Await 的任务异步编程 (TAP) 模型 (C#) | Microsoft Learn

C# 学习async/await(个人理解)的更多相关文章

  1. async/await 深度理解使用

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

  2. JavaScript基础——深入学习async/await

    本文由云+社区发表 本篇文章,小编将和大家一起学习异步编程的未来--async/await,它会打破你对上篇文章Promise的认知,竟然异步代码还能这么写! 但是别太得意,你需要深入理解Promis ...

  3. 初步学习async/await,Task.GetAwaiter,Task.Result

    网上关于async/await的知识有很多,看了很多但不如自己实践一遍来得快,所以这里记录下我的理解和大家学习下. 首先以最简单的同步方法来开始如下 private static void Test( ...

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

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

  5. 七 vue学习 async/await

    1:  javaScript async/await: 调用async函数的时候,是异步的,函数后面的代码继续执行.! async / await是ES7的重要特性之一,也是目前社区里公认的优秀异步解 ...

  6. async/await 的理解

    1.如果一个方法标记了 async 关键字,那么这个方法被调用时就是异步执行: 2.利用Task运行一个任务,这个任务里的函数也是异步执行: 3.如果一个任务前被标记await,那么等待这个任务执行完 ...

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

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

  8. 理解C#中的 async await

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

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

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

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

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

随机推荐

  1. 【题解】CF1714F Build a Tree and That Is It

    题面传送门 解决思路 题目中虽然说是无根树,但我们可以钦定这棵树的根为节点 \(1\),方便构造,这是不 影响结果的. 以下记给定的三段长度为 \(a,b,c\). 先考虑无解的情况. 首先,给出的三 ...

  2. WCF实现大文件上传

    一.文件服务接口 1.文件上传 2.文件传输(上传按钮) 3.文件传输停止 服务地址: 在客端添加服务器引用,从而实现客户端调用服务器的功能. 二.契约 服务契约[ServiceContract]:定 ...

  3. C#多线程之高级篇(上)

    前言 抛开死锁不谈,只聊性能问题,尽管锁总能粗暴的满足同步需求,但一旦存在竞争关系,意味着一定会有线程被阻塞,竞争越激烈,被阻塞的线程越多,上下文切换次数越多,调度成本越大,显然在高并发的场景下会损害 ...

  4. vulnhub靶场之DIGITALWORLD.LOCAL: SNAKEOIL

    准备: 攻击机:虚拟机kali.本机win10. 靶机:DIGITALWORLD.LOCAL: SNAKEOIL,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://down ...

  5. 解决redmi airdots 2右耳充不进电,灯不亮

    解决方案 在放入充电盒并插入数据线充电状态下,长按按钮

  6. hexo-gitalk-评论自动初始化

    第一步 申请Personal Access Token 从 Github 的 Personal access tokens 页面,点击 Generate new token 第二步 安装项目依赖 np ...

  7. 【Shell案例】【!~//、grep反向查找、sed流编辑器】13、去掉所有包含this的句子

    描述写一个 bash脚本以实现一个需求,去掉输入中含有this的语句,把不含this的语句输出示例:假设输入如下:that is your bagis this your bag?to the deg ...

  8. 【每日一题】【链表.next.next判空条件】141. 环形链表/NC4 判断链表中是否有环-211120/220123

    给你一个链表的头节点 head ,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链 ...

  9. 【Hive】概念、安装、数据类型、DDL、DML操作、查询操作、函数、压缩存储、分区分桶、实战Top-N、调优(fetch抓取)、执行计划

    一.概念 1.介绍 基于Hadoop的数据仓库工具,将结构化数据映射为一张表,可以通过类SQL方式查询 本质:将HQL转换成MapReduce程序 Hive中具有HQL对应的MapReduce模板 存 ...

  10. 网络基础与osi七层与TCP/IP协议

     一 什么是网络 网络:计算机网络是一组计算机或网络设备通过有形 的线缆或无形的媒介如无线,连接起来,按照一定的 规则,进行通信的集合. 通信,是指人与人.人与物.物与物之间通过某种媒 介和行为进行的 ...