0

質問のとおりです。awaitコードを呼び出すだけで新しいスレッドが作成される可能性があるかどうかを知りたいです。

コンソールアプリの実行中だとしましょう。

4

1 に答える 1

3

Microsoft の .NET 4.5Task実装では、最初にawaitインラインで (つまり、タスクを完了したスレッドで) ベースの継続を呼び出そうとします。インラインで実行できない場合 (スタックの深さや a の使用などによりSynchronizationContext)、代わりにシステム スレッド プールが使用されます。プールで新しいスレッドの作成をトリガーする可能性がありますが、明示的に新しいスレッドを作成することはありません。

詳細についてSystem.Threading.Tasks.AwaitTaskContinuationは、参照元を参照してください。

この回答は awaited にのみ適用さTaskれ、Microsoft .NET 4.5 Framework にのみ適用されることに注意してください。SynchronizationContextまた、を使用していないスレッドから待機している場合はConfigureAwait(false)、実装に依存しSynchronizationContextます。WinForms、WPF、または Silverlight に対して新しいスレッドを作成しないでくださいSynchronizationContext

于 2014-03-10T16:50:12.573 に答える