web-dev-qa-db-ja.com

ASP.NET MVC4非同期コントローラー-使用する理由

asyncコントローラーアクションを使用する理由とタイミングを理解しようとしています。最終的には、その中でawaitを使用すると、ビューが返されるように操作が完了するまで待機します。

例えば

public async Task<ActionResult> TryMe()
{
   await SomeActionAsync();
   return View();
}

この場合、asyncを使用する場合、またはasyncを使用しない場合、Actionの実行には同じ時間がかかります。

少なくとも2つの遅い操作(互いに依存しない操作)を並行して実行しようとしていない場合、asyncコントローラーアクションを使用する理由は何もありません。

私が間違っていたら訂正してください。私はここで何かが足りないと思います。

34
DorR

awaitキーワードのポイントは、醜いコールバックを書かずに非同期操作を操作できるようにすることです。

非同期操作を使用すると、スレッドプールスレッドの浪費を回避できます。

説明

ASP.Netは、マネージスレッドプールのスレッドですべてのコードを実行します。
一度に実行する遅い要求が多すぎる場合、スレッドプールがいっぱいになり、新しい要求はスレッドが解放されるのを待つ必要があります。

ただし、要求が遅いのは、計算を行う(コンピュートバインド)ためではなく、ハードディスク、データベースサーバー、外部のWebサービス(IOまたはネットワークなど)を待っているためです。 -バウンド)。

貴重なスレッドプールスレッドを無駄にして、外部操作が完了するのを待つだけでは意味がありません。

非同期操作を使用すると、操作を開始し、スレッドをプールに戻し、操作が完了したときに別のスレッドプールスレッドで「ウェイクアップ」できます。
操作の実行中、スレッドは消費されません。

50
SLaks