スレッドを使用する古い方法を完全に置き換えることができますか?
いいえ。スレッドはもっと多くの便利なことをすることができます。Awaitは、時間がかかるもの、最も一般的にはI/Oリクエストを処理するように特別に設計されています。これは従来、I/O要求が完了したときにコールバックで実行されていました。これらのコールバックに依存するコードを書くことは非常に困難です。awaitはそれを大幅に単純化します。
スレッドが非同期で実行できることを実行できますか?
だいたい。Awaitは遅延の処理を処理するだけで、スレッドが行うことは何もしません。awaitキーワードの右側にあるawait式は、仕事を成し遂げるものです。理想的には、スレッドをまったく使用せず、ドライバーリクエストを送信し、ドライバーがデータ転送を完了すると、完了通知コールバックを生成します。ネットワークは断然最も一般的な使用法であり、数百ミリ秒の遅延が一般的であり、デスクトップまたはLANから「クラウド」に移動するサービスの避けられない副作用です。このようなサービスを同期的に使用すると、UIがまったく応答しなくなります。
WebClient.DownloadStringAsyncなどの一部のメソッドでのみ使用できます
いいえ。タスクを返す任意のメソッドで使用できます。XxxxAsync()メソッドは、時間がかかる一般的な操作のために.NETFrameworkで事前に作成されたメソッドです。Webサーバーからデータをダウンロードするようなものです。