36

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

例えば

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

この場合、 を使用しても使用しasyncなくてもasyncアクションの実行には同じ時間がかかります。

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

私が間違っている場合は、私を修正してください。ここで何かが足りないと思います。

4

1 に答える 1

52

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

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

説明

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

ただし、多くの場合、リクエストは、計算を実行している(コンピューティングバウンド)ためではなく、ハードディスク、データベースサーバー、外部Webサービス(IOまたはネットワーク)などの他の何かを待機しているために遅くなります。 -バウンド)。

外部操作が終了するのを待つためだけに貴重なスレッドプールスレッドを無駄にすることには意味がありません。

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

于 2013-03-03T19:56:30.470 に答える