コンピュータ サイエンスの用語では、 aTask
はfutureまたは a promiseです。(これらの 2 つの用語を同義的に使用する人もいれば、異なる方法で使用する人もいます。正確な定義については誰も同意できません。) 基本的には、Task<T>
を返す「約束」ですがT
、今はそうではありません。後で戻ってきますか?
AThread
はその約束を果たす方法です。しかし、すべてTask
の人が新品を必要とするわけではありませんThread
。(実際、スレッドの作成は、スレッド プールから既存のスレッドを再利用するよりもはるかにコストがかかるため、望ましくないことがよくあります。これについては、後で詳しく説明します。) 待機している値がファイル システムまたはデータベースまたはネットワークの場合、他の要求にサービスを提供できるときに、スレッドが座ってデータを待つ必要はありません。代わりに、Task
コールバックを登録して、準備ができたときに値を受け取ることができます。
特に、値を返すのにこれほど長い時間がかかる理由については述べてTask
いません。計算に時間がかかる場合や、フェッチに時間がかかる場合があります。aを実行するために a を使用するのは、前者の場合のみです。(.NET では、スレッドは非常に高価なので、通常はスレッドをできるだけ避けて、複数の CPU で複数の負荷の高い計算を実行する場合にのみ使用します。たとえば、Windows では、スレッドの重量は 12 キロバイトです ( Linux では、スレッドの重さはわずか 4 キロバイトですが、Erlang/BEAM ではわずか 400 バイトです。.NET では 1 メガバイトです!)Thread
Task