0

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

让我们假设它在控制台应用程序期间。

4

1 回答 1

3

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

于 2014-03-10T16:50:12.573 回答