[解決済み] MVC5でasyncを使用するメリットは何ですか?
2022-09-16 18:03:12
質問
とはどのような違いがあるのでしょうか。
public ActionResult Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
IdentityResult result = IdentityManager.Authentication.CheckPasswordAndSignIn(AuthenticationManager, model.UserName, model.Password, model.RememberMe);
if (result.Success)
{
return Redirect("~/home");
}
else
{
AddErrors(result);
}
}
return View(model);
}
とする。
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
IdentityResult result = await IdentityManager.Authentication.CheckPasswordAndSignInAsync(AuthenticationManager, model.UserName, model.Password, model.RememberMe);
if (result.Success)
{
return Redirect("~/home");
}
else
{
AddErrors(result);
}
}
return View(model);
}
MVCのコードに非同期があることがわかりましたが、何が違うのでしょうか。一方は他方よりはるかに良いパフォーマンスを与えますか?一方は他方より問題のデバッグが容易ですか?非同期を追加するために、私のアプリケーションの他のコントローラを変更する必要がありますか?
どのように解決するのですか?
非同期アクションは、リモートサーバー呼び出しなどのI/Oバウンド操作を実行する場合にのみ有効です。非同期呼び出しの利点は、I/O操作の間、ASP.NETワーカスレッドが使用されないことです。では、最初の例でどのように動作するかを説明します。
- リクエストがアクションにヒットすると、ASP.NETはスレッドプールからスレッドを取得し、実行を開始します。
-
は
IdentityManager.Authentication.CheckPasswordAndSignIn
メソッドが呼び出されます。これはブロッキング呼び出しです -> 呼び出しの間中、ワーカスレッドは危険にさらされています。
そして、2番目の呼び出しがどのように動作するかを説明します。
- リクエストがアクションにヒットすると、ASP.NETはスレッドプールからスレッドを取得し、実行を開始します。
-
は
IdentityManager.Authentication.CheckPasswordAndSignInAsync
が呼び出され、すぐに返されます。I/O完了ポートが登録され、ASP.NETワーカスレッドはスレッドプールに解放されます。 - 後で操作が完了すると、I/O 完了ポートがシグナルされ、別のスレッドがスレッドプールから引き出されて、ビューの返却を完了します。
2番目のケースでわかるように、ASP.NETワーカスレッドは短時間しか使用されません。これは、他のリクエストに対応するために、プール内に利用可能なスレッドがより多くあることを意味します。
結論として、真の非同期APIを内部に持つ場合にのみ、非同期アクションを使用します。もし、非同期アクションの内部でブロッキングコールをしたら、その利点をすべて失うことになります。
関連
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み] 私のインターフェースがTaskを返さなければならない場合、操作不要の実装を持つための最良の方法は何ですか?
-
[解決済み] 複数のタスクにasync/awaitを使用する
-
[解決済み] MVCにおけるViewModelとは?
-
[解決済み】非同期処理の待ち時間、Wait()でプログラムがフリーズする原因はここにある
-
[解決済み】1つのビューに複数のモデルを表示する
-
[解決済み】Html.ActionLinkが"?Length=4 "とレンダリングされるのはなぜか?
-
[解決済み】ASP.NET MVC 3 コントローラから200 HTTPステータスコードを返す方法
-
[解決済み】NULLモデルを持つrenderpartialは、間違った型を渡される
-
[解決済み] ASP.NET MVCとIIS7で生のHTTPリクエスト/レスポンスをログに記録する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] glyphicons-halflings-regular.woff2 not foundに関するエラーを削除する方法
-
[解決済み] GET リクエストを許可するには、JsonRequestBehavior を AllowGet に設定します。
-
[解決済み] System.Web.HttpException (0x80004005)。リクエストの最大長を超えました
-
[解決済み] RedirectToActionのパラメータとしてmodelを渡すことはできますか?
-
[解決済み] ELMAHをASP.NET MVCの[HandleError]属性で動作させる方法は?
-
[解決済み] ASP.NET MVCのビューを文字列としてレンダリングする方法は?
-
[解決済み】ASP.NET MVC 3 - 部分テンプレートと表示テンプレートと編集テンプレート
-
[解決済み] asp.net mvc: なぜ Html.CheckBox は追加の隠された入力を生成するのですか?
-
[解決済み】AutoMapper.CreateMapsをどこに配置するか?
-
[解決済み] mvc 4 で部分ビューにパラメータを渡すにはどうすればよいですか?