質問:
.NET 4.5 で HttpClient.GetAsync(...) で async/await 言語機能を使用すると、特定の状況でデッドロックが発生する可能性があります。具体的には、HttpClient.GetAsync(...) の結果を待機すると、次の状況でデッドロックが発生する可能性があります:
説明:
デッドロックは、ASP.NET で一度に 1 つの要求のみを処理できるようにする SynchronizationContext の使用が原因です。 await を使用すると、メソッドはキャプチャされた SynchronizationContext (この場合は ASP.NET 要求コンテキスト) で再開されます。ただし、タスクの完了を待ってスレッドがブロックされると、ASP.NET 要求コンテキストでメソッドを再開できなくなり、デッドロックが発生します。
解決策:
このデッドロックを回避するには、次のベスト プラクティスに従ってください:
これらのガイドラインに従うことで、AsyncAwait_GetSomeDataAsync メソッドの継続がバックグラウンド スレッドで実行されるようにし、ASP.NET 要求スレッドのブロックを回避してデッドロックを防ぐことができます。
詳細情報:
以上が.NET 4.5で待機/asyncを使用したときに、HTTPCLIENT.GETASYNC(...)デッドロックがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。