私はASP.NET Web API 2アプリケーションを開発中です。アプリケーションでは、すべての非同期要求に対して使用しています。deos ConfigureAwaitとは何ですか? ASP.NET Web API 2
ConfigureAwait(false);
どういうことが本当に理解できません。私はインターネットで見ましたが、それが正確に何を理解していないのですか?
私はASP.NET Web API 2アプリケーションを開発中です。アプリケーションでは、すべての非同期要求に対して使用しています。deos ConfigureAwaitとは何ですか? ASP.NET Web API 2
ConfigureAwait(false);
どういうことが本当に理解できません。私はインターネットで見ましたが、それが正確に何を理解していないのですか?
これを理解するには、Synchronization ContextとThreading Modelsを理解する必要があります。
実用的な観点から、標準的な例を見てみましょう。 GUIアプリケーション(WinフォームまたはWPF)を開発しています。あなたは専用のUIスレッドを持っています。 UIスレッドのUIを更新する必要があります。計算や一部の応答を待ってUIスレッドをブロックしないでください。
ConfigureAwaitは非同期/を待つとの感覚を持っています。スレッドプールで実行されるのawait後、あなたが(偽)ConfigureAwaitを指定した場合、デフォルトで、はを待つコードの後
await DoAsync().ConfigureAwait(false);
//CPU intensive operation. Will run on thread pool
あなたが捧げていない、キャプチャUIスレッド上で
await DoAsync();
//UI updating code goes here. Will run on UI thread
コードを実行しますUIスレッド、あなたはASP.NETアプリケーションを持っている限り。しかし、同期コンテキストも重要です。 Understanding the SynchronizationContext in ASP.NETが詳細をお知らせします。
ありがとうございます。明らかです。 ASP.NET Web API 2アプリケーションでは本当に重要ですか? –
ASP.NETスレッドモデルはより複雑です。しかし、基本的に、ConfigureAwait(false)を使用する厳密なルールはありません。デフォルトの動作は、あなたが期待している可能性が最も高いものです。パフォーマンスチューニングに使用できます。しかし、ConfigureAwait(false)はライブラリコードでは良い習慣と考えられます(ASP.NET以外でも使用できると仮定します) –
この[blog](https://blog.stephencleary.com/2012/07/dont-block-on-async-code.html)を読んでください。 –
つまり、同じスレッドを待機していない別のランダムなスレッドでも、コンテキストは継続しますが、正しいのでしょうか? –
[すべてのサーバーサイドコードに対してConfigureAwaitを呼び出すベストプラクティス]の可能な複製(https://stackoverflow.com/questions/13489065/best-practice-to-call-configureawait-for-all-server-side-code) – kuskmen