ほとんどのリクエストは長時間実行されるI/Oバウンドリクエストであるため、AsyncControllerを使用する予定です。計画では、この処理をCLRスレッドにオフロードして、IISスレッドの最大数を解放して新しい着信要求を処理できるようにします。
これまでのところ、AsyncControllerの使用例はすべて、AsyncControllerの非同期アクションメソッド内から非同期で長時間実行されるI/Oバウンドプロセスを実行します。コントローラーの非同期アクションメソッドで並行して実行できる操作が2つ以上ある場合は、そうすることの価値を確認できます。
そこでは、ニュースサービスを非同期で実行します。これは本当に必要ですか?そのアクションメソッドで実行する必要があるのがニュースサービスだけである場合、ニュースサービスを非同期で実行することは冗長に思えます。この場合、実行するI/Oプロセスが長くなります。アクションメソッドの非同期バージョン内から同期的に実行することはできませんか?AsyncControllerの非同期アクションメソッド内に入ると、作業はすでにCLRスレッドに渡されていませんか?
繰り返しになりますが、並行して実行できる作業がもっとたくさんある場合、非同期でさらにアクションを実行する方法がわかります。ただし、長いブロッキング操作は1つしかないため、コードを単純に保つことをお勧めします。
次に示すように、Task.Factory.StartNew()を使用した別の戦術も 確認しました。ASP.NETMVC2でのAsyncControllerの使用
不必要に冗長に見えるので、この方法でも実行しないことを強くお勧めします。