c#的await延续会创建新线程吗?

本文关键字:线程 新线程 await 延续 创建 | 更新日期: 2023-09-27 17:49:14

如问题所示。我想知道是否简单地在代码中调用await有可能创建一个新线程。

让我们假设它是在控制台应用程序中。

c#的await延续会创建新线程吗?

微软的。net 4.5 Task实现将首先尝试内联调用基于await的延续(即,在完成任务的任何线程上)。如果它不能内联执行(例如,由于堆栈深度或SynchronizationContext的使用),则使用系统线程池。它不会显式地创建一个新线程,尽管它可能会触发池中新线程的创建。

参见参考资料中的System.Threading.Tasks.AwaitTaskContinuation了解详细信息。

注意这个答案只有适用于等待的Task,并且只适用于Microsoft . net 4.5框架。此外,如果您正在等待具有SynchronizationContext的线程,并且您没有使用ConfigureAwait(false),那么它将取决于SynchronizationContext的实现。不应该为WinForms, WPF或Silverlight SynchronizationContext创建新的线程。