c#的await延续会创建新线程吗?
本文关键字:线程 新线程 await 延续 创建 | 更新日期: 2023-09-27 17:49:14
如问题所示。我想知道是否简单地在代码中调用await
有可能创建一个新线程。
让我们假设它是在控制台应用程序中。
微软的。net 4.5 Task
实现将首先尝试内联调用基于await
的延续(即,在完成任务的任何线程上)。如果它不能内联执行(例如,由于堆栈深度或SynchronizationContext
的使用),则使用系统线程池。它不会显式地创建一个新线程,尽管它可能会触发池中新线程的创建。
参见参考资料中的System.Threading.Tasks.AwaitTaskContinuation
了解详细信息。
注意这个答案只有适用于等待的Task
,并且只适用于Microsoft . net 4.5框架。此外,如果您正在等待具有SynchronizationContext
的线程,并且您没有使用ConfigureAwait(false)
,那么它将取决于SynchronizationContext
的实现。不应该为WinForms, WPF或Silverlight SynchronizationContext
创建新的线程。