gpt4 book ai didi

c# - 当线程为 'awaits' 时会发生什么

转载 作者:行者123 更新时间:2023-11-30 12:39:54 24 4
gpt4 key购买 nike

async 方法 waits Task 当前运行的线程会发生什么情况?

我推测在 UI 线程上,消息循环恢复,在线程池线程上,线程被释放回线程池。但是,如果线程是手动启动的,会发生什么情况?还有其他类型的线程吗?

最佳答案

我花了很长时间才意识到,但这部分 async-await 非常简单,只需向上调用堆栈。任何时候方法 awaits 某事(假设它不是已完成的 Task 或任何类似的东西)都会返回给调用者。由于我们正在谈论您的代码放弃对线程的控制,这意味着这是堆栈顶部的最后一段代码。

如果我们在 UI 线程上运行,我们将返回到消息循环。如果我们在线程池上,线程控制返回到线程池。手动创建的线程只运行一个 void 方法,你只能使用 await 如果它是一个 async void 方法,这意味着它将在第一个 await< 结束线程 甚至在方法完成之前。

continuations 的工作方式相同。它将在 UI 线程或线程池中排队,然后它要么再次等待,要么完成,再次放弃控制。

编辑:我已经对自定义任务调度程序进行了一些试验,您可以在那里应用完全相同的逻辑。当任务等待时,它放弃控制。我使用的任务调度程序基于此 single threaded task scheduler .在这种情况下,放弃控制意味着任务调度程序开始处理队列中的下一个任务。同样重要的是要注意,除非使用 ConfigureAwait(false),否则延续是使用当前任务计划程序安排的。

关于c# - 当线程为 'awaits' 时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43534061/

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