我是.NET框架中提供的异步功能的新手
所以在我的理解中,async关键字提供的好处是,当线程调用异步方法时,它可以在await点返回并正确地恢复运行.
我的问题是从它返回之后,线程在做什么?它可以用于在线程池中运行其他任务项,如果是这样,必须还有上下文切换?如果没有,为什么不旋转呢?
=====所以会有其他线程来接管异步函数的未完成部分,这个上下文切换是如何发生的,比如这些状态存储在哪里?以及另一个线程如何处理这些状态
当你的代码遇到一个await表达式时(假设等待没有同步完成),控制权返回到调用方法,就像你写的一样return;.
(它返回一个Task<T>调用者可以用来等待异步部分完成的)
然后调用方法将继续执行,直到它返回(它通常会立即返回,因为它也是await返回的任务),依此类推,直到它到达调用堆栈的(面向用户的部分)的顶部.
一旦它到达调用堆栈的顶部,该线程将做它自然做的任何事情.
如果它是一个UI线程,它将返回到消息循环,保持UI响应.
如果它是一个ThreadPool线程(或ASP.Net工作线程),它将返回池并等待(同步)以进行更多工作.
如果它是一个"原始"线程(控制台应用程序中的主线程,或者new Thread()它,它将终止.