19

私は Threading ライブラリのほとんどを広範囲に使用してきました。私は、新しいスレッドの作成、BackgroundWorkers の作成、および組み込みの .NET ThreadPool の使用にかなり精通しています (これらはすべて非常に優れています)。

しかし、Taskクラスを使用する理由が見つかりませんでした。それらを使用している人々の例を 1 つか 2 つ見たことがありますが、それらの例はあまり明確ではなく、新しいスレッドの代わりにタスクを使用する必要がある理由の概要を示していませんでした。

質問 1: 大まかに言えば、.NET で並列処理を行う他の方法と比較して、タスクを使用するのはどのような場合に役立ちますか?

質問 2: タスクの使用方法を示す簡単な例や難易度が中程度の例はありますか?

4

1 に答える 1

27

Tasksを使用する主な利点は 2 つあります。

  1. Task単なる計算ではなく、将来利用可能な任意の結果を表すことができます (一般的な概念は .Net に固有のものではなく、futureと呼ばれます)。これは、非同期操作に sを使用するasync-で特に重要です。結果を取得する操作は失敗する可能性があるため、s は失敗を表すこともあります。awaitTaskTask
  2. Taskそれらを操作するための多くのメソッドがあります。終了するまで同期的に待機し ( Wait())、その結果を待機し ( )、終了Result時にいくつかの操作をセットアップし( )、複数の sで動作するいくつかのメソッド( 、、) を同期的に行うことができます。これはすべて、他の並列処理方法を使用して可能ですが、手動で行う必要があります。TaskContinueWith()TaskWaitAll()WaitAny()ContinueWhenAll()

を使用することには、いくつかの小さな利点もありますTask

  1. カスタムを使用して、TaskSchedulerいつどこでTask実行するかを決定できます。これは、たとえば、UI スレッドで を実行したい場合Task、並列度を制限したい場合Taskまたはレベルのリーダーライター ロックを使用したい場合に役立ちます。
  2. Tasksサポート連携解除を通じてご利用いただけますCancellationToken
  3. Task計算を表す のパフォーマンスが向上しました。たとえば、より効率的な処理のためにワークスティーリング キューを使用し、インライン化 (Task同期的に待機しているスレッドでまだ開始されていない実行) もサポートしています。
于 2012-07-22T09:19:45.790 に答える