.NET 4.5 をターゲットとする ASP.NET MVC 4 アプリケーションがあります。子アクションの 1 つは、HttpClient を使用して Web サービスを呼び出します。
HttpClient の応答を待って IO をブロックしているため、コードを async/await パターンに変換することは非常に理にかなっています。ただし、MVC 4 が子アクションを実行しようとすると、次のエラー メッセージが表示されます。
非同期操作が完了するのを待っている間に、HttpServerUtility.Execute がブロックされました。
一見すると、MVC 4 は子アクション内で async/await をサポートしていないように見えます。残っている唯一のオプションは、同期コードを使用して実行し、非同期タスクで「待機」を強制することです。
ご存知のように、ASP.NET コンテキストの非同期タスクで .Result または .Wait() に触れると、すぐにデッドロックが発生します。私の非同期ロジックはクラス ライブラリにラップされているため、「await blah.ConfigureAwait(false)」トリックを使用できません。子アクションに「async」のタグを付けて await を使用するとエラーが発生し、await を構成できなくなることを覚えておいてください。
この時点で私は隅に追いやられています。MVC 4 子アクションで非同期メソッドを使用する方法はありますか? 回避策のない完全なバグのようです。