首页 新闻 会员 周边 捐助

async和await

0
悬赏园豆:5 [待解决问题]

看到了博客

async和await

想知道async和await到底需不需要开启线程啊,真的很困惑,

我觉得是不是会开启线程啊,只不过是线程用的少啊

博学多思的主页 博学多思 | 初学一级 | 园豆:76
提问于:2018-07-02 12:57
< >
分享
所有回答(1)
1

async/await 只是一个状态机,await 时释放当前线程 -> 进入状态机等待异步操作完成 -> 退出状态机在一个线程中继续执行

“进入状态机等待异步操作完成”,这里有2种异步操作,一种是 CPU-Bound ,比如 Task.Run ,这时异步操作会在另外一个线程中执行;一种是 IO-Bound ,这时异步操作不会占用线程。

推荐阅读:

理解 async/await 的关键:1)它是状态机;2)它提高了线程的利用率(IO-Bound场景);3)它在多线程执行任务时不影响当前线程(CPU-Bound场景)

dudu | 园豆:30778 (高人七级) | 2018-07-02 13:14

请问基于Io的异步方法,退出状态机就回到原来的线程了吗?

就是在状态机里面,是不是会创建一个线程

支持(0) 反对(0) 博学多思 | 园豆:76 (初学一级) | 2018-07-02 13:20

@博学多思: 不一定回到原来的线程,只要线程池里有空闲可用的线程

支持(0) 反对(0) JeffWong | 园豆:2328 (老鸟四级) | 2018-07-02 15:15

@博学多思: “退出状态机就回到原来的线程”,不是回到原来的线程,是从线程池重新分配一个线程。在状态机里面,不会创建线程。

支持(0) 反对(0) dudu | 园豆:30778 (高人七级) | 2018-07-02 15:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册