408

C# 4.0 ではTaskSystem.Threading.Tasks名前空間にあります。Threadとの本当の違いは何ですかTask。私は自分自身で学習するために、いくつかのサンプルプログラム(MSDNから取得したヘルプ)を作成しました

Parallel.Invoke 
Parallel.For 
Parallel.ForEach 

しかし、アイデアがそれほど明確ではないため、多くの疑問があります。

最初に Stackoverflow で同様のタイプの質問を検索しましたが、この質問のタイトルで同じものを取得できなかった可能性があります。以前にここに投稿されたのと同じタイプの質問について誰かが知っている場合は、リンクの参照を親切に提供してください。

4

8 に答える 8

497

コンピュータ サイエンスの用語では、 aTaskfutureまたは a promiseです。(これらの 2 つの用語を同義的に使用する人もいれば、異なる方法で使用する人もいます。正確な定義については誰も同意できません。) 基本的には、Task<T>を返す「約束」ですがT、今はそうではありません。後で戻ってきますか?

AThreadはその約束を果たす方法です。しかし、すべてTaskの人が新品を必要とするわけではありませんThread。(実際、スレッドの作成は、スレッド プールから既存のスレッドを再利用するよりもはるかにコストがかかるため、望ましくないことがよくあります。これについては、後で詳しく説明します。) 待機している値がファイル システムまたはデータベースまたはネットワークの場合、他の要求にサービスを提供できるときに、スレッドが座ってデータを待つ必要はありません。代わりに、Taskコールバックを登録して、準備ができたときに値を受け取ることができます。

特に、値を返すのにこれほど長い時間がかかる理由については述べてTaskいません。計算に時間かかる場合や、フェッチに時間がかかる場合があります。aを実行するために a を使用するのは、前者の場合のみです。(.NET では、スレッドは非常に高価なので、通常はスレッドをできるだけ避けて、複数の CPU で複数の負荷の高い計算を実行する場合にのみ使用します。たとえば、Windows では、スレッドの重量は 12 キロバイトです ( Linux では、スレッドの重さはわずか 4 キロバイトですが、Erlang/BEAM ではわずか 400 バイトです。.NET では 1 メガバイトです!)ThreadTask

于 2010-11-09T03:47:05.017 に答える
341

タスクとは、やりたいことです。

スレッドは、そのタスクを実行できる多くのワーカーの 1 つです。

.NET 4.0 の用語では、タスクは非同期操作を表します。スレッドは、作業をチャンクに分割し、個別のスレッドに割り当てることによって、その操作を完了するために使用されます。

于 2010-11-09T03:15:56.250 に答える
6

を使用Taskしてやりたいことを指定し、それTaskThread. GUIスレッドではなく、Task新しく作成されたもので実行されます。Thread

とともに使用TaskしますTaskFactory.StartNew(Action action)。ここではデリゲートを実行するため、スレッドを使用しない場合は同じスレッド (GUI スレッド) で実行されます。スレッドに言及すると、これを別のスレッドで実行できTaskます。これは、デリゲートを直接実行するか、そのデリゲートをスレッドにアタッチしてそのスレッドでそのデリゲートを実行できるため、不要な作業です。使用しないでください。それはただ不必要です。ソフトウェアを最適化する場合は、これを削除することをお勧めします。

Action**は であることに注意してくださいdelegate

于 2012-07-19T23:52:31.303 に答える