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