正如问题所说。我想知道在代码中简单地调用await
是否有可能创建一个新线程。
让我们假设它是在控制台应用程序中。
答案 0 :(得分:3)
Microsoft的.NET 4.5 Task
实现将首先尝试调用基于await
的内联延续(即,在任何线程完成任务时)。如果它不能内联执行(例如,由于堆栈深度或使用SynchronizationContext
),则使用系统线程池。它不会显式创建新线程,但它可能会触发池中新线程的创建。
有关详细信息,请参阅参考来源中的System.Threading.Tasks.AwaitTaskContinuation
。
请注意,此答案仅 适用于等待Task
,仅适用于Microsoft .NET 4.5 Framework。此外,如果您正在等待来自SynchronizationContext
的帖子,并且您没有使用ConfigureAwait(false)
,那么它将取决于SynchronizationContext
实施。不应为WinForms,WPF或Silverlight SynchronizationContext
创建新线程。