======async/await====== 这是C#/Javascript等编程语言的异步编程语法。简单来说: * async用来标记一个方法是不是可以执行到一半就暂停,然后把剩下的部分放到之后再继续执行。 * await用来标记暂停点,允许让代码在那里暂停执行,然后把这个暂停点之后的代码交给之后再跑。 * await暂停点之后的代码会在被await的代码完成后继续执行。 然后问题就简单了。既然一个方法可以执行到一半就暂停,那么暂停之后,剩下的代码怎么办?答案是:把它包装起来,等条件满足之后再执行。 最基本的操作自然是异步I/O,网络操作通过 await异步等待,等网络操作完成后再接着执行后面的代码。这样当被等待的网络操作执行完成之前,当前的线程可以去处理任务队列中的其他任务,从而完全消除阻塞并最大化CPU 使用效率。而等网络操作完成了,之前等待网络操作的后续操作就可以被恢复执行,至于是被扔到某个线程的队列里排队执行还是直接现场执行,完全由调度器决定(([[https://www.zhihu.com/question/1991106644348801648/answer/2094579042926305868|C#中 async/await 的正确使用姿势是什么,有哪些常见的误区和最佳实践? - hez2010的回答 - 知乎 ]]))。