AsyncControllerは、次の状況で(通常のコントローラーと比較して)役立ちます。
実行時間の長いタスクがあり、このタスクは通常、I / O完了ポートを使用して他の層(Webサービス、データベースなど)によって実行されます。。したがって、リクエストはワーカースレッドで開始され、IOCPを開くBeginXXXメソッドを呼び出します(サポートされている場合は、別のワーカースレッドを描画するだけなので、役に立たない場合)。ワーカースレッドはすぐにに返されます。スレッドプール。長い操作の実行中、サーバー上でワーカースレッドは消費されていません。完了すると、IOCPに信号を送り、非同期コントローラーはプールから別のスレッドを引き出して、要求を終了し、結果をビューに返します。ここで注意すべき点がいくつかあります。通常のコントローラーの代わりに非同期コントローラーを使用したという事実は、クライアントにまったく違いはありません。クライアントは、リクエストが完了するまで同じ時間待つ必要があります。非同期コントローラーを使用すると、低速の操作が高速になるという誤った印象を受けます。
要約すると、高速実行リクエストの場合、非同期コントローラーは通常のコントローラーと比較して何のメリットももたらしません。遅いリクエストの場合は可能ですが、長時間実行される操作の性質と、CPUまたはI/Oバウンドのどちらであるかによって異なります。CPUにバインドされたタスクの場合、非同期コントローラーもこれ以上役に立ちません。ただし、すべての場合において、アプリケーションで広範な負荷テストを実行する必要があります。
これは、ASP.NETでの非同期要求について説明しているMSDNに関する非常に優れた記事です。
そして、これは、非同期コントローラーを使用してロングポーリングを実装する方法を示すブログ投稿です。