Task
.NET では、と の2 つのクラスを使用できますThread
。
- これらのクラスの違いは何ですか?
Thread
over を使う方が良いのはいつですかTask
(またその逆はどうですか)?
ベストアンサー1
Thread
は低レベルの概念です。スレッドを直接開始する場合は、スレッド プールなどで実行されるのではなく、別のスレッドになることがわかります。
Task
ただし、これは単に「コードを実行する場所」を抽象化するだけではなく、実際には「将来の結果の約束」にすぎません。いくつかの異なる例を挙げます。
Task.Delay
実際のCPU時間は必要ありません。将来タイマーが鳴るように設定しているようなものです。- によって返されるタスクは、
WebClient.DownloadStringTaskAsync
ローカルで多くのCPU時間を費やすことはありません。ネットワーク遅延またはリモート作業(Webサーバー)にほとんどの時間を費やす可能性のある結果を表します。 - によって返されるタスクは、
Task.Run()
実際には「このコードを個別に実行してほしい」という意味です。そのコードが実行される正確なスレッドは、いくつかの要因によって異なります。
Task<T>
抽象化は C# 5 の非同期サポートにとって極めて重要であることに注意してください。
一般的に、可能な限り高レベルの抽象化を使用することをお勧めします。最新の C# コードでは、独自のスレッドを明示的に開始する必要はほとんどありません。