C# 4.0では、System.Threading.TasksTask
名前空間にがあります。との本当の違いは何でしょうか。 学習のために、サンプルプログラム(MSDNから取得したヘルプ)をいくつか作成しました。Thread
Task
Parallel.Invoke
Parallel.For
Parallel.ForEach
しかし、その考えがあまり明確ではないため、多くの疑問があります。
最初に Stackoverflow で同様の質問を検索しましたが、この質問のタイトルでは同じものを見つけることができませんでした。以前ここに投稿された同じ種類の質問について知っている方がいらっしゃいましたら、リンクの参照を教えてください。
ベストアンサー1
コンピュータ サイエンスの用語では、 は未来または約束Task
です。(この 2 つの用語を同義語として使用する人もいれば、異なる意味で使用する人もいます。正確な定義については誰も同意できません。) 基本的に、は を返すことを「約束」しますが、今すぐではありません。ちょっと忙しいので、後で戻ってきたらどうですか?Task<T>
T
はThread
、その約束を果たす方法です。しかし、すべての がTask
まったく新しい を必要とするThread
わけではありません。(実際、スレッドを作成することは、スレッド プールの既存のスレッドを再利用するよりもはるかにコストがかかるため、多くの場合望ましくありません。これについては後で詳しく説明します。) 待機している値がファイル システム、データベース、またはネットワークから取得される場合、他の要求を処理できるときに、スレッドがデータを待機する必要はありません。代わりに、 は、Task
準備ができたときに値を受け取るためのコールバックを登録する場合があります。
特に、 は、値を返すのになぜそれほど長い時間がかかるのかを説明しTask
ていません。 計算に長い時間がかかるのかもしれませんし、取得に長い時間がかかるのかもしれません。 前者の場合にのみ、 を使用して を実行します。 (.NET では、スレッドはとんでもなく高価なので、通常はできる限り避け、複数の CPU で複数の重い計算を実行する場合にのみ使用してください。 たとえば、Windows では、スレッドは 12 キロバイト (だと思う) ですが、Linux では、スレッドはわずか 4 キロバイト、Erlang/BEAM ではわずか 400 バイトです。 .NET では、1 メガバイトです!)Thread
Task