Webで色々なコードを見ていると、XXXAsync()というメソッドを使っている事に気が付きました。
Windows FomrsではUIスレッドを止めない為にXXXAsync()を呼び出すんだなーとイメージできるのですが、
ASP.NET MVCでXXXAsync()を呼び出すメリットがわかりません。
なぜ、ASP.NET のサンプルを見ていると、XXXAsync()を呼び出している人がいるんですか?
→ async/await の使い方自体は知っています。
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
回答2件
4
ASP.NET の話ということであれば ASP.NET のタグをつけていただけると幸いです。
ASP.NET MVCでXXXAsync()を呼び出すメリットがわかりません。
ASP.NET 非同期処理を行う理由は、Windows Forms アプリの場合の UI の応答性の向上とは異なり、スループットを向上させ HTTP エラー 503 (サービス利用不可) になるのを防ぐということです。
以下の記事の図を見てください。
ASP.NET の非同期/待機の概要
https://msdn.microsoft.com/ja-jp/magazine/dn802603.aspx
「図 3 外部リソースを非同期に待機」が ASP.NET で非同期処理を行っているところです。
「外部リソース」というのは別のサーバーにある Web サービスとか DB サーバーです。外部リソース内での処置に時間がかかるような場合が特に有効です。
非同期処理を行わない場合は一つの要求は一つのスレッドをつかんだままになりますが、非同期処理を行うと、「外部リソース」に処理を投げた後はスレッドは即スレッドプールに戻され、他のユーザーから来る要求に対処することができます。
Thread Pool のスレッドの数は限られているので、非同期処理を行わないとスレッドが枯渇しやすくなります。枯渇するとキューに処理が溜まりますが、キューが満杯になると HTTP エラー 503 (サービス利用不可) となってしまいます。
なお、効果があるのは「外部リソース」に処理を投げるというような I/O バウンドの処理で、CPU バウンドの処理には効果はありません。
投稿2017/08/28 07:03
総合スコア17909
1
ベストアンサー
こんにちは。
非同期APIで一番目に見えて効果があるのはUIを止めないことですが、非同期のメリットはそれだけではないです。
いくつか分かりやすい例を上げてみます。
- IO処理等を同期で記述した場合、処理が完了するまで1本のスレッドを専有することになります。非同期IOであれば、処理中にスレッドを解放することができ、資源効率を改善することができます。
- お互いが依存していない処理を並列処理したい場合にも非同期APIは役に立ちます。
- そもそもライブラリが非同期APIしか提供していない場合があります。
これらの理由が組み合わさって、あるいは、async/awaitによる言語統合が自然であり非同期APIを「使わない理由」があまりないために、深く考えずに使用されるようになってきているのだろうと考えています。
投稿2017/08/28 06:36
総合スコア4043
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
関連した質問
Q&A
受付中
asp.net core で input type="file" の選択内容を保持する
回答3
クリップ1
更新
2023/05/31
Q&A
解決済
ASP.NETのチェックボックスの実装方法
回答1
クリップ0
更新
2020/09/02
Q&A
受付中
NotionAPIでページコンテンツを取得したい
回答1
クリップ1
更新
2023/05/30
Q&A
解決済
asp.netでdiv要素の値を保持したい
回答1
クリップ1
更新
2023/05/29
Q&A
解決済
【Flutter】GoogleMapのダークモード、ライトモードをリアルタイムに反映させたいのですができません。
回答1
クリップ0
更新
2023/05/24
Q&A
受付中
JavaScriptで表示している印刷プレビューの画面サイズ変更
回答1
クリップ0
更新
2023/05/26
Q&A
解決済
C# ProcessStartInfo("cmd.exe",コマンド)でコマンドプロンプトが起動できてたかを、サーバーログに出力して確認したい。
回答1
クリップ0
更新
2023/05/15
意見交換
クローズ
ASP.NETのWebサイト後継を構築するにあたり、フレームワークの採用を検討中です。
回答10
クリップ0
更新
2023/05/22
同じタグがついた質問を見る
C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2017/08/28 07:40