ASP.NET MVC 5 テンプレートを見ていましたが、アクションの多くが非同期としてマークされていることに気付きました。
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { }
MVC アクションでいつこれを行う必要がありますか? データベースへのアクセスが含まれている場合
アクション内でリポジトリを呼び出す場合、Task を使用して非同期にする必要がありますか?
ASP.NET MVC 5 テンプレートを見ていましたが、アクションの多くが非同期としてマークされていることに気付きました。
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { }
MVC アクションでいつこれを行う必要がありますか? データベースへのアクセスが含まれている場合
アクション内でリポジトリを呼び出す場合、Task を使用して非同期にする必要がありますか?
あなたの質問の核心は次のとおりです: MVC アクションを非同期にする必要があるのはいつですか? この問題の詳細については、 http://blogs.msdn.com/b/rickandy/archive/2009/11/14/should-my-database-calls-be-asynchronous.aspxを参照してください。彼はデータベースについてのみ話しますが、ポイントは引き継がれます。
基本的に、データベースを非同期で呼び出すことはほとんどありません。
非同期操作を使用して Web サーバー上でブロックされるスレッドの数を減らすデータベース アプリケーションは、ほとんどの場合、完全に時間の無駄です。
可能であれば常に async IO を使用するようにと言う人々に惑わされないでください。非同期は現在大流行しています。多くの不合理なアドバイスが広まっています。
Entity Framework 6 (MVC 5 でデフォルトで使用) は非同期データベース呼び出しをサポートするようになったため、使用されている非同期を反映するようにアクション メソッドのシグネチャが更新されました。簡単な答えは、待機を伴う可能性のあるタスクがある場合は常に非同期を使用することです。うまくいけば、データベース クエリのラウンドトリップに十分な時間がかからず、実際に非同期から多くのメリットが得られますが、データベースがダウンしたり、特に激しく攻撃されたりした場合は、少なくともその過程で IIS がデッドロックしないようにするのに役立ちます。