async/await 只是一个状态机,await 时释放当前线程 -> 进入状态机等待异步操作完成 -> 退出状态机在一个线程中继续执行
“进入状态机等待异步操作完成”,这里有2种异步操作,一种是 CPU-Bound ,比如 Task.Run ,这时异步操作会在另外一个线程中执行;一种是 IO-Bound ,这时异步操作不会占用线程。
推荐阅读:
理解 async/await 的关键:1)它是状态机;2)它提高了线程的利用率(IO-Bound场景);3)它在多线程执行任务时不影响当前线程(CPU-Bound场景)
请问基于Io的异步方法,退出状态机就回到原来的线程了吗?
就是在状态机里面,是不是会创建一个线程
@博学多思: 不一定回到原来的线程,只要线程池里有空闲可用的线程
@博学多思: “退出状态机就回到原来的线程”,不是回到原来的线程,是从线程池重新分配一个线程。在状态机里面,不会创建线程。