ネットワークとデータベースへの呼び出しをラップしてそれらを待機するWebアプリケーションがある場合Task<T>
、これによりスレッドがブロックされないようになり、再利用できるようになります。
ただし、IO作業を実行するときに、ブロックされているスレッドがまだあるので、待つことに実質的なメリットはありませんか?
ネットワークとデータベースへの呼び出しをラップしてそれらを待機するWebアプリケーションがある場合Task<T>
、これによりスレッドがブロックされないようになり、再利用できるようになります。
ただし、IO作業を実行するときに、ブロックされているスレッドがまだあるので、待つことに実質的なメリットはありませんか?
ブロッキング呼び出しをでラップしているだけの場合はTask.Run
、正しいです。利点はありません。
ただし、自然に非同期のメソッド(たとえば、非同期//HttpClient
メソッドWebClient
およびHttpWebRequest
非同期データベースメソッド)を使用している場合、それらの要求によってスレッドは使用されず、スケーラビリティの利点が得られます。
Windowsのデバイスドライバーレベルでは、すべてのI/Oは非同期です。同期APIは単なる便利なラッパーです。当然、非同期メソッドは同期APIを介してスレッドをブロックしません。それらは非同期APIに基づいて構築されています。