34

asyncコントローラーアクションを使用する理由と時期を理解しようとしています。最終的に、awaitを使用すると、Viewを返すために操作が完了するまで待機します。この場合ASP.NET MVC4非同期コントローラ - なぜ使用するのですか?

例えば

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

私はasyncを使用してasyncかを使用している場合、アクションは、実行するために同じ時間がかかります。

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

私が間違っている場合は私を修正してください。私はここに何かがないと思う。

答えて

50

キーワードawaitのキーワードは、の非同期操作で醜いコールバックを書くことなく作業できるようにすることです。

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

説明

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

しかし、あなたのリクエストは、計算(コンピューティングバウンド)を行っているのではなく、ハードディスク、データベースサーバー、外部Webサービスなど他のものを待っているためIOまたはネットワークバインド)。

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

非同期操作では、操作を開始し、スレッドをプールに戻してから、操作が完了したときに別のスレッドプールスレッドで「起きる」ことができます。
操作が実行されている間、スレッドは消費されません。

+0

スレッドプールを解放するためだけに非同期メソッド(DB、ファイルシステム、WSなど)を使用する必要がありますか?実行時間は両方で同じままですこのような操作を実行しようとすると、常にasyncを使用するのがベストプラクティスですか? – DorR

+0

@DorR:はい、すべての操作に必ず非同期実装があるわけではありません。 – SLaks

+9

ASP.NETの非同期機能を示すSteve Sandersonの優れた講演があります:http://channel9.msdn.com/Events/TechDays/Techdays-2012-the -Netherlands/2287このプレゼンテーションでは、非同期メソッドの使用によるパフォーマンスのメリットを明確に示しています。 –

関連する問題