C#等待continuation创建新线程吗?

时间:2014-03-10 16:37:32

标签: c# multithreading asynchronous async-await continuation

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

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

1 个答案:

答案 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创建新线程。