2017-08-18 10 views
4

私はASP.NET Web API 2アプリケーションを開発中です。アプリケーションでは、すべての非同期要求に対して使用しています。deos ConfigureAwaitとは何ですか? ASP.NET Web API 2

ConfigureAwait(false); 

どういうことが本当に理解できません。私はインターネットで見ましたが、それが正確に何を理解していないのですか?

+2

この[blog](https://blog.stephencleary.com/2012/07/dont-block-on-async-code.html)を読んでください。 –

+0

つまり、同じスレッドを待機していない別のランダムなスレッドでも、コンテキストは継続しますが、正しいのでしょうか? –

+0

[すべてのサーバーサイドコードに対してConfigureAwaitを呼び出すベストプラクティス]の可能な複製(https://stackoverflow.com/questions/13489065/best-practice-to-call-configureawait-for-all-server-side-code) – kuskmen

答えて

4

これを理解するには、Synchronization ContextThreading 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が詳細をお知らせします。

+0

ありがとうございます。明らかです。 ASP.NET Web API 2アプリケーションでは本当に重要ですか? –

+2

ASP.NETスレッドモデルはより複雑です。しかし、基本的に、ConfigureAwait(false)を使用する厳密なルールはありません。デフォルトの動作は、あなたが期待している可能性が最も高いものです。パフォーマンスチューニングに使用できます。しかし、ConfigureAwait(false)はライブラリコードでは良い習慣と考えられます(ASP.NET以外でも使用できると仮定します) –

関連する問題