Async/Awaitとスレッド 質問する

Async/Awaitとスレッド 質問する

.Net 4.5では、Microsoftは非同期コーディングを簡素化する新Async/Await機能を追加しました。しかし、

  1. Async/Await従来の使用方法を完全に置き換えることはできますかThreads?
  2. 非同期で実行できるAsync/Awaitことはすべて実行できますか?Thread
  3. Async/Awaitのような一部のメソッドでのみ使用できますか、それとも、メイン スレッドをブロックしないように、WebClient.DownloadStringAsync任意の同期メソッドを変換して使用できるでしょうか?Async/Await

ベストアンサー1

スレッドを使用する従来の方法を完全に置き換えることができますか?

いいえ。スレッドはもっと多くの便利な機能を実行できます。Awaitは、特に次のような処理を実行するために設計されています。何か時間がかかります。最も一般的には、I/O 要求です。これは、従来は I/O 要求が完了したときにコールバックで実行されていました。これらのコールバックに依存するコードを書くのは非常に難しいですが、await を使用すると大幅に簡単になります。

スレッドが非同期に実行できることはすべて実行できますか?

大まかに言えば、Awaitは遅延を処理するだけで、それ以外はスレッドが行うようなことは何もしません。awaitは表現、つまり await キーワードの右側にあるものが、ジョブを完了させるものです。理想的には、スレッドをまったく使用せず、ドライバー要求をポストし、ドライバーがデータ転送を完了すると、完了通知コールバックを生成します。ネットワークは、これまでのところ最も一般的な使用法であり、数百ミリ秒の遅延は一般的であり、デスクトップまたは LAN から「クラウド」にサービスが移行する際の避けられない副作用です。このようなサービスを同期的に使用すると、UI がまったく応答しなくなります。

WebClient.DownloadStringAsyncなどの一部のメソッドでのみ使用できます。

いいえ。Task を返す任意のメソッドで使用できます。XxxxAsync() メソッドは、Web サーバーからデータをダウンロードするなど、時間のかかる一般的な操作用に .NET フレームワークであらかじめ用意されたメソッドです。

おすすめ記事