TaskFactory クラス

定義

Task オブジェクトを作成およびスケジュールするためのサポートを提供します。

public ref class TaskFactory
public class TaskFactory
type TaskFactory = class
Public Class TaskFactory
継承
TaskFactory

次の例では、静的 Factory プロパティを使用して、メソッドを 2 回呼び出 TaskFactory.StartNew します。 1 つ目は、ユーザーの MyDocuments ディレクトリ内のファイルの名前を配列に設定し、2 番目の配列にユーザーの MyDocuments ディレクトリのサブディレクトリの名前を設定します。 次に、メソッドを TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) 呼び出します。このメソッドは、最初の 2 つのタスクの実行が完了した後、2 つの配列内のファイルとディレクトリの数に関する情報を表示します。

using System;
using System.IO;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      Task[] tasks = new Task[2];
      String[] files = null;
      String[] dirs = null;
      String docsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

      tasks[0] = Task.Factory.StartNew( () => files = Directory.GetFiles(docsDirectory));
      tasks[1] = Task.Factory.StartNew( () => dirs = Directory.GetDirectories(docsDirectory));

      Task.Factory.ContinueWhenAll(tasks, completedTasks => {
                                             Console.WriteLine("{0} contains: ", docsDirectory);
                                             Console.WriteLine("   {0} subdirectories", dirs.Length);
                                             Console.WriteLine("   {0} files", files.Length);
                                          } );
   }
}
// The example displays output like the following:
//       C:\Users\<username>\Documents contains:
//          24 subdirectories
//          16 files
Imports System.IO
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim tasks(1) As Task
      Dim files() As String = Nothing
      Dim dirs() As String = Nothing
      Dim docsDirectory As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
      
      tasks(0) = Task.Factory.StartNew( Sub()
                                           files = Directory.GetFiles(docsDirectory)
                                        End Sub )
      tasks(1) = Task.Factory.StartNew( Sub()
                                           dirs = Directory.GetDirectories(docsDirectory)
                                        End Sub )
      Task.Factory.ContinueWhenAll(tasks, Sub(completedTasks)
                                             Console.WriteLine("{0} contains: ", docsDirectory)
                                             Console.WriteLine("   {0} subdirectories", dirs.Length)
                                             Console.WriteLine("   {0} files", files.Length)
                                          End Sub)
   End Sub
End Module
' The example displays output like the following:
'       C:\Users\<username>\Documents contains:
'          24 subdirectories
'          16 files

注釈

.NET には、タスクを作成およびスケジュールするための 2 つのファクトリが用意されています。

  • クラス。 TaskFactory オブジェクトを作成 Task します Task<TResult> 。 このメソッドのオーバーロードを呼び出して、既定以外の引数を必要とするタスクを作成して実行できます。

    警告

    .NET Framework 4.5 以降では、既定の構成値を使用してタスクを作成し、Task.Runすぐに開始する最も簡単な方法が提供されます。

  • TaskFactory<TResult>オブジェクトを作成Task<TResult>するクラス。

この TaskFactory クラスを使用すると、次の操作を実行できます。

  • タスクを作成し、メソッドを呼び出してすぐに開始します StartNew

    警告

    .NET Framework 4.5 以降では、既定の構成値を使用してタスクを作成し、Task.Runすぐに開始する最も簡単な方法が提供されます。

  • 配列内のいずれかのタスクが完了したときに開始するタスクを、メソッドを呼び出して作成します ContinueWhenAny

  • メソッドを呼び出して、配列内のすべてのタスクが完了したときに開始するタスクを作成します ContinueWhenAll

静的 Task<TResult>.Factory プロパティは、既定 TaskFactory<TResult> のオブジェクトを返します。 クラス コンストラクターのいずれかを TaskFactory 呼び出して、クラスが作成する Task オブジェクトを TaskFactory 構成することもできます。 次の例では、キャンセル トークン、タスク作成オプション、継続オプション、およびカスタマイズされたタスク スケジューラを持つタスクを作成する新しい TaskFactory オブジェクトを構成します。

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

class Example
{
   static CancellationTokenSource cts = new CancellationTokenSource();

   static TaskFactory factory = new TaskFactory(
      cts.Token,
      TaskCreationOptions.PreferFairness,
      TaskContinuationOptions.ExecuteSynchronously,
      new CustomScheduler());

   static void Main()
   {
      var t2 = factory.StartNew(() => DoWork());
      cts.Dispose();
   }

   static void DoWork() {/*...*/ }
}
Imports System.Collections.Generic
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim cts As New CancellationTokenSource()
      Dim factory As New TaskFactory(cts.Token,
                                     TaskCreationOptions.PreferFairness,
                                     TaskContinuationOptions.ExecuteSynchronously,
                                     New CustomScheduler())

      Dim t2 = factory.StartNew(Sub() DoWork())
      cts.Dispose()
   End Sub

   Sub DoWork()
      ' ...
   End Sub
End Module

ほとんどの場合、新しい TaskFactory インスタンスをインスタンス化する必要はありません。 代わりに、既定値を使用する Task.Factory ファクトリ オブジェクトを返すプロパティを使用できます。 その後、そのメソッドを呼び出して新しいタスクを開始したり、タスクの継続を定義したりできます。 図については、例を参照してください。

コンストラクター

TaskFactory()

既定の構成を使用して、TaskFactory インスタンスを初期化します。

TaskFactory(CancellationToken)

指定された構成を使用して、TaskFactory インスタンスを初期化します。

TaskFactory(CancellationToken, TaskCreationOptions, TaskContinuationOptions, TaskScheduler)

指定された構成を使用して、TaskFactory インスタンスを初期化します。

TaskFactory(TaskCreationOptions, TaskContinuationOptions)

指定された構成を使用して、TaskFactory インスタンスを初期化します。

TaskFactory(TaskScheduler)

指定された構成を使用して、TaskFactory インスタンスを初期化します。

プロパティ

CancellationToken

このタスク ファクトリの既定のキャンセル トークンを取得します。

ContinuationOptions

このタスク ファクトリの既定のタスク継続オプションを取得します。

CreationOptions

このタスク ファクトリの既定のタスク作成オプションを取得します。

Scheduler

このタスク ファクトリのデフォルト タスク スケジューラを取得します。

メソッド

ContinueWhenAll(Task[], Action<Task[]>)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAll(Task[], Action<Task[]>, CancellationToken)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAll(Task[], Action<Task[]>, CancellationToken, TaskContinuationOptions, TaskScheduler)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAll(Task[], Action<Task[]>, TaskContinuationOptions)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, TaskContinuationOptions)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, CancellationToken)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, CancellationToken, TaskContinuationOptions, TaskScheduler)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, TaskContinuationOptions)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, CancellationToken)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, TaskContinuationOptions)

一連の指定したタスクが完了したときに開始する継続タスクを作成します。

ContinueWhenAny(Task[], Action<Task>)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task を作成します。

ContinueWhenAny(Task[], Action<Task>, CancellationToken)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task を作成します。

ContinueWhenAny(Task[], Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task を作成します。

ContinueWhenAny(Task[], Action<Task>, TaskContinuationOptions)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task を作成します。

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task<TResult> を作成します。

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task<TResult> を作成します。

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task<TResult> を作成します。

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, TaskContinuationOptions)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task<TResult> を作成します。

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task を作成します。

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, CancellationToken)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task を作成します。

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task を作成します。

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, TaskContinuationOptions)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task を作成します。

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task<TResult> を作成します。

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, CancellationToken)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task<TResult> を作成します。

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task<TResult> を作成します。

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, TaskContinuationOptions)

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続 Task<TResult> を作成します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, Object)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task を作成します。

FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, Object, TaskCreationOptions)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task を作成します。

FromAsync(IAsyncResult, Action<IAsyncResult>)

指定された Task の完了時に終了メソッド アクションを実行する IAsyncResult を作成します。

FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions)

指定された Task の完了時に終了メソッド アクションを実行する IAsyncResult を作成します。

FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions, TaskScheduler)

指定された Task の完了時に終了メソッド アクションを実行する IAsyncResult を作成します。

FromAsync<TArg1,TArg2,TArg3,TResult>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task<TResult> を作成します。

FromAsync<TArg1,TArg2,TArg3,TResult>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object, TaskCreationOptions)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task<TResult> を作成します。

FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, TArg3, Object)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task を作成します。

FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, TArg3, Object, TaskCreationOptions)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task を作成します。

FromAsync<TArg1,TArg2,TResult>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task<TResult> を作成します。

FromAsync<TArg1,TArg2,TResult>(Func<TArg1,TArg2,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object, TaskCreationOptions)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task<TResult> を作成します。

FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, Object)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task を作成します。

FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, Object, TaskCreationOptions)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task を作成します。

FromAsync<TArg1,TResult>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task<TResult> を作成します。

FromAsync<TArg1,TResult>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object, TaskCreationOptions)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task<TResult> を作成します。

FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, Object)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task を作成します。

FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, Object, TaskCreationOptions)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task を作成します。

FromAsync<TResult>(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task<TResult> を作成します。

FromAsync<TResult>(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object, TaskCreationOptions)

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表す Task<TResult> を作成します。

FromAsync<TResult>(IAsyncResult, Func<IAsyncResult,TResult>)

指定された Task<TResult> の完了時に終了メソッド関数を実行する IAsyncResult を作成します。

FromAsync<TResult>(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions)

指定された Task<TResult> の完了時に終了メソッド関数を実行する IAsyncResult を作成します。

FromAsync<TResult>(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions, TaskScheduler)

指定された Task<TResult> の完了時に終了メソッド関数を実行する IAsyncResult を作成します。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
StartNew(Action)

指定されたアクション デリゲートのタスクを作成して開始します。

StartNew(Action, CancellationToken)

指定されたアクション デリゲートおよび取り消しトークンのタスクを作成して開始します。

StartNew(Action, CancellationToken, TaskCreationOptions, TaskScheduler)

指定されたアクション デリゲート、取り消しトーク、作成オプション、および状態のタスクを作成して開始します。

StartNew(Action, TaskCreationOptions)

指定されたアクション デリゲートおよび作成オプションのタスクを作成して開始します。

StartNew(Action<Object>, Object)

指定されたアクション デリゲートおよび状態のタスクを作成して開始します。

StartNew(Action<Object>, Object, CancellationToken)

指定されたアクション デリゲート、状態、および取り消しトークンのタスクを作成して開始します。

StartNew(Action<Object>, Object, CancellationToken, TaskCreationOptions, TaskScheduler)

指定されたアクション デリゲート、状態、取り消しトークン、作成オプション、およびタスク スケジューラーのタスクを作成して開始します。

StartNew(Action<Object>, Object, TaskCreationOptions)

指定されたアクション デリゲート、状態、および作成オプションのタスクを作成して開始します。

StartNew<TResult>(Func<Object,TResult>, Object)

指定された関数デリゲートおよび状態の型 TResult のタスクを作成して開始します。

StartNew<TResult>(Func<Object,TResult>, Object, CancellationToken)

指定された関数デリゲート、乗田い、および取り消しトークンの型 TResult のタスクを作成して開始します。

StartNew<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions, TaskScheduler)

指定された関数デリゲート、状態、取り消しトークン、作成オプション、およびタスク スケジューラーの型 TResult のタスクを作成して開始します。

StartNew<TResult>(Func<Object,TResult>, Object, TaskCreationOptions)

指定された関数デリゲート、状態、および作成オプションの型 TResult のタスクを作成して開始します。

StartNew<TResult>(Func<TResult>)

指定された関数デリゲートの型 TResult のタスクを作成して開始します。

StartNew<TResult>(Func<TResult>, CancellationToken)

指定された関数デリゲートおよび取り消しトークンの型 TResult のタスクを作成して開始します。

StartNew<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions, TaskScheduler)

指定された関数デリゲート、取り消しトークン、作成オプション、およびタスク スケジューラーの型 TResult のタスクを作成して開始します。

StartNew<TResult>(Func<TResult>, TaskCreationOptions)

指定された関数デリゲートおよび作成オプションの型 TResult のタスクを作成して開始します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象

スレッド セーフ

パブリックメンバーとプロテクトメンバーはすべてスレッドセーフであり、複数の TaskFactory スレッドから同時に使用できます。

こちらもご覧ください