gpt4 book ai didi

C#学习async/await(个人理解)

转载 作者:我是一只小鸟 更新时间:2023-02-09 22:31:53 28 4
gpt4 key购买 nike

await : 等待的意思 。

async:异步(非同步) 。

  。

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

  。

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

  。

  。

  。

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

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

  。

  。

  。

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

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

  。

  。

  。

  。

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

  。

  。

  。

4、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(个人理解)的文章就讲到这里了,如果你想了解更多关于C#学习async/await(个人理解)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com