最初のものは、タスクが完了するまで ASP.NET 要求スレッドをブロックします。
2 番目はスレッドをすぐに解放し、タスクが完了したら別のスレッドを取得します。
利点は何ですか?
スレッドは、実際にはかなりコストのかかるリソースです。OS リソースを消費し、スレッドには、メソッドに到達する前に呼び出されたすべてのメソッドのすべての変数を含むスタックがあります。サーバーが 100 スレッドを処理できるほど十分に強力であるとしましょう。100 件のリクエストを処理できます。各リクエストを処理するのに 100 ミリ秒かかるとしましょう。これにより、1 秒あたり 1000 件のリクエストが得られます。
GetProductAsync() の呼び出しに、これらの 100 ミリ秒のうち 90 ミリ秒かかることが判明したとします。データベースまたはサービスがほとんどの時間を占めることは珍しくありません。これらの呼び出しを非同期にするということは、各スレッドが 10 ミリ秒だけ必要になるということです。突然、同じサーバーで 1 秒あたり 10000 のリクエストをサポートできるようになります。
したがって、「非同期コントローラーの利点」は、1 秒あたりのリクエスト数が 10 倍になる可能性があります。
もちろん、すべてはバックエンドのスケーラビリティにも依存しますが、.NET が面倒な作業をすべて行ってくれるのに、なぜボトルネックが発生するのでしょうか。非同期処理だけではありません。いつものように、悪魔は細部に宿ります。http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspxなど、役立つリソースがたくさんあります。