gpt4 book ai didi

c# - 从异步点返回后线程在做什么?

转载 作者:太空狗 更新时间:2023-10-30 00:53:01 27 4
gpt4 key购买 nike

我是 .NET 框架中提供的异步功能的新手

所以在我看来,async 关键字提供的好处是当线程调用异步方法时,它可以在等待点返回并正确地恢复运行。

我的问题是它从那个点返回后,线程在做什么?它可以用来运行线程池中的其他任务项吗,如果是这样,还必须有上下文切换吗?如果没有,为什么不在那里旋转?

=====所以会有其他线程接管异步函数未完成的部分,这种上下文切换是如何发生的,比如那些状态存储在哪里?以及另一个线程如何获取这些状态

最佳答案

当您的代码遇到 await 时表达式(假设 awaitable 未同步完成),控制返回到调用方法,就好像你已经写了 return; .
(它返回一个 Task<T>,调用者可以使用它来等待异步部分的完成)

然后调用方法将继续执行直到返回(它通常会立即返回,因为它也是await 返回的任务),依此类推直到它到达(用户- 调用堆栈的面向部分。

一旦它到达调用堆栈的顶部,该线程就会自然而然地执行任何操作。

如果是 UI 线程,它将返回到消息循环,保持 UI 响应。

如果它是 ThreadPool 线程(或 ASP.Net 工作线程),它将返回池并等待(同步)更多工作。

如果它是“原始”线程(控制台应用程序中的主线程,或 new Thread() ,它将终止。

关于c# - 从异步点返回后线程在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18370781/

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