質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.45%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

1185閲覧

C#でよく見る○○○Async()の使い所

redhat98

総合スコア236

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

3クリップ

投稿2017/08/28 06:13

Webで色々なコードを見ていると、XXXAsync()というメソッドを使っている事に気が付きました。

Windows FomrsではUIスレッドを止めない為にXXXAsync()を呼び出すんだなーとイメージできるのですが、
ASP.NET MVCでXXXAsync()を呼び出すメリットがわかりません。

なぜ、ASP.NET のサンプルを見ていると、XXXAsync()を呼び出している人がいるんですか?

→ async/await の使い方自体は知っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

redhat98

2017/08/28 07:40

ありがとうございます。
guest

0

ベストアンサー

こんにちは。
非同期APIで一番目に見えて効果があるのはUIを止めないことですが、非同期のメリットはそれだけではないです。
いくつか分かりやすい例を上げてみます。

  • IO処理等を同期で記述した場合、処理が完了するまで1本のスレッドを専有することになります。非同期IOであれば、処理中にスレッドを解放することができ、資源効率を改善することができます。
  • お互いが依存していない処理を並列処理したい場合にも非同期APIは役に立ちます。
  • そもそもライブラリが非同期APIしか提供していない場合があります。

これらの理由が組み合わさって、あるいは、async/awaitによる言語統合が自然であり非同期APIを「使わない理由」があまりないために、深く考えずに使用されるようになってきているのだろうと考えています。

投稿2017/08/28 06:36

tamoto

総合スコア4128

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

redhat98

2017/08/28 07:39

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問