TaskFactory<TResult> クラス

定義

Task<TResult> オブジェクトを作成およびスケジュールするためのサポートを提供します。Provides support for creating and scheduling Task<TResult> objects.

generic <typename TResult>
public ref class TaskFactory
public class TaskFactory<TResult>
type TaskFactory<'Result> = class
Public Class TaskFactory(Of TResult)

型パラメーター

TResult

このクラスのメソッドによって作成される Task<TResult> オブジェクトの戻り値。The return value of the Task<TResult> objects that the methods of this class create.

継承
TaskFactory<TResult>

次の例では、静的プロパティを使用して Factory 、メソッドを2回呼び出し TaskFactory<TResult>.StartNew ます。The following example uses the static Factory property to make two calls to the TaskFactory<TResult>.StartNew method. 最初のタスクは、ユーザーのマイドキュメント] ディレクトリにあるファイルの名前が入力された文字列配列を返します。2番目のタスクは、ユーザーのマイドキュメント] ディレクトリのサブディレクトリの名前が設定された文字列配列を返します。The first task returns a string array that is populated with the names of files in the user's MyDocuments directory, while the second returns a string array that is populated with the names of subdirectories of the user's MyDocuments directory. 次に、 TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) メソッドを呼び出します。このメソッドは、実行の完了後に2つのタスクによって返される配列内のファイルおよびディレクトリの数に関する情報を表示します。It then calls the TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) method, which displays information about the number of files and directories in the arrays returned by the two tasks after they have completed execution.

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

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

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

      Task.Factory.ContinueWhenAll(tasks, completedTasks => {
                                             Console.WriteLine("{0} contains: ", docsDirectory);
                                             Console.WriteLine("   {0} subdirectories", tasks[1].Result.Length);
                                             Console.WriteLine("   {0} files", tasks[0].Result.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(Of String())
      Dim docsDirectory As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
      
      tasks(0) = Task(Of String()).Factory.StartNew( Function()Directory.GetFiles(docsDirectory) )
''                                        End Sub )
      tasks(1) = Task(Of String()).Factory.StartNew( Function() Directory.GetDirectories(docsDirectory) )
''                                        End Sub )
      Task.Factory.ContinueWhenAll(tasks, Sub(completedTasks)
                                             Console.WriteLine("{0} contains: ", docsDirectory)
                                             Console.WriteLine("   {0} subdirectories", tasks(1).Result.Length)
                                             Console.WriteLine("   {0} files", tasks(0).Result.Length)
                                          End Sub)
   End Sub
End Module
' The example displays output like the following:
'       C:\Users\<username>\Documents contains:
'          24 subdirectories
'          16 files

注釈

.NET Framework には、タスクを作成およびスケジュールするための2つのファクトリが用意されています。The .NET Framework provides two factories for creating and scheduling tasks:

TaskFactory<TResult>クラスを使用すると、次の操作を実行できます。The TaskFactory<TResult> class allows you to do the following:

  • タスクを作成し、メソッドを呼び出してすぐに開始し StartNew ます。Create a task and start it immediately by calling the StartNew method. このメソッドのオーバーロードを呼び出して、既定以外の引数を必要とするタスクを作成および実行できます。You can call the overloads of this method to create and execute a task that requires non-default arguments.

    警告

    以降では、 .NET Framework 4.5.NET Framework 4.5 Task.Run 既定の構成値を使用してタスクを作成し、すぐに開始するための最も簡単な方法が提供されています。Starting with the .NET Framework 4.5.NET Framework 4.5, the Task.Run method provides the easiest way to create a task with default configuration values and start it immediately.

  • またはメソッドを呼び出して、配列内のいずれかのタスクが完了したときに開始するタスクを作成し ContinueWhenAny ContinueWhenAny ます。Create a task that starts when any one of the tasks in an array has completed by calling the ContinueWhenAny or ContinueWhenAny method.

  • またはメソッドを呼び出して、配列内のすべてのタスクが完了したときに開始するタスクを作成し ContinueWhenAll ContinueWhenAll ます。Create a task that starts when all the tasks in an array have completed by calling the ContinueWhenAll or ContinueWhenAll method.

静的プロパティは、 Task<TResult>.Factory 既定の TaskFactory<TResult> オブジェクトを返します。The static Task<TResult>.Factory property returns a default TaskFactory<TResult> object. クラスコンストラクターの1つを呼び出して、クラスによって TaskFactory<TResult> Task<TResult> 作成されるオブジェクトを構成することもでき TaskFactory<TResult> ます。You can also call one of the TaskFactory<TResult> class constructors to configure the Task<TResult> objects that the TaskFactory<TResult> class creates. 次の例では、 TaskFactory<TResult> 指定したキャンセルトークン、タスク作成オプション、継続オプション、およびカスタマイズされたタスクスケジューラを持つタスクを作成するための新しいオブジェクトを構成します。The following example configures a new TaskFactory<TResult> object to create tasks that have a specified cancellation token, task creation options, continuation options, and a customized task scheduler.

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

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

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

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

   static int DoWork()
   {
       /*...*/
       return DateTime.Now.Hour <= 12 ?  1 : 2;
    }
}
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(Of Integer)(
                         cts.Token,
                         TaskCreationOptions.PreferFairness,
                         TaskContinuationOptions.ExecuteSynchronously,
                         New CustomScheduler())

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

   Function DoWork() As Integer
      Return If(Date.Now.Hour <= 12, 1, 2)
   End Function
End Module

ほとんどの場合、新しいインスタンスをインスタンス化する必要はありません TaskFactory<TResult>In most cases, you do not have to instantiate a new TaskFactory<TResult> instance. 代わりに、静的な Task<TResult>.Factory プロパティを使用できます。このプロパティは、既定値を使用するファクトリオブジェクトを返します。Instead, you can use the static Task<TResult>.Factory property, which returns a factory object that uses default values. その後、メソッドを呼び出して、新しいタスクを開始したり、タスクの継続を定義したりすることができます。You can then call its methods to start new tasks or define task continuations. 図については、例を参照してください。For an illustration, see the example.

コンストラクター

TaskFactory<TResult>()

既定の構成を使用して、TaskFactory<TResult> インスタンスを初期化します。Initializes a TaskFactory<TResult> instance with the default configuration.

TaskFactory<TResult>(CancellationToken)

既定の構成を使用して、TaskFactory<TResult> インスタンスを初期化します。Initializes a TaskFactory<TResult> instance with the default configuration.

TaskFactory<TResult>(CancellationToken, TaskCreationOptions, TaskContinuationOptions, TaskScheduler)

指定された構成を使用して、TaskFactory<TResult> インスタンスを初期化します。Initializes a TaskFactory<TResult> instance with the specified configuration.

TaskFactory<TResult>(TaskCreationOptions, TaskContinuationOptions)

指定された構成を使用して、TaskFactory<TResult> インスタンスを初期化します。Initializes a TaskFactory<TResult> instance with the specified configuration.

TaskFactory<TResult>(TaskScheduler)

指定された構成を使用して、TaskFactory<TResult> インスタンスを初期化します。Initializes a TaskFactory<TResult> instance with the specified configuration.

プロパティ

CancellationToken

このタスク ファクトリの既定のキャンセル トークンを取得します。Gets the default cancellation token for this task factory.

ContinuationOptions

このタスク ファクトリの TaskContinuationOptions 列挙値を取得します。Gets the TaskContinuationOptions enumeration value for this task factory.

CreationOptions

このタスク ファクトリの TaskCreationOptions 列挙値を取得します。Gets the TaskCreationOptions enumeration value for this task factory.

Scheduler

このタスク ファクトリのタスク スケジューラーを取得します。Gets the task scheduler for this task factory.

メソッド

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

指定された一連のタスクの完了時に開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of a set of provided tasks.

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

指定された一連のタスクの完了時に開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of a set of provided tasks.

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

指定された一連のタスクの完了時に開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of a set of provided Tasks.

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

指定された一連のタスクの完了時に開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of a set of provided Tasks.

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

指定された一連のタスクの完了時に開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of a set of provided tasks.

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

指定された一連のタスクの完了時に開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of a set of provided tasks.

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

指定された一連のタスクの完了時に開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of a set of provided tasks.

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

指定された一連のタスクの完了時に開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of a set of provided tasks.

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

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of any task in the provided set.

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

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of any task in the provided set.

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

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of any task in the provided set.

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

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of any task in the provided set.

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

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of any task in the provided set.

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

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of any task in the provided set.

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

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of any task in the provided set.

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

指定された一連のタスクのうち任意のタスクが完了したときに開始される継続タスクを作成します。Creates a continuation task that will be started upon the completion of any task in the provided set.

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

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

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表すタスクを作成します。Creates a task that represents a pair of begin and end methods that conform to the Asynchronous Programming Model pattern.

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

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表すタスクを作成します。Creates a task that represents a pair of begin and end methods that conform to the Asynchronous Programming Model pattern.

FromAsync(IAsyncResult, Func<IAsyncResult,TResult>)

指定された IAsyncResult の完了時に終了メソッド関数を実行するタスクを作成します。Creates a task that executes an end method function when a specified IAsyncResult completes.

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

指定された IAsyncResult の完了時に終了メソッド関数を実行するタスクを作成します。Creates a task that executes an end method function when a specified IAsyncResult completes.

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

指定された IAsyncResult の完了時に終了メソッド関数を実行するタスクを作成します。Creates a task that executes an end method function when a specified IAsyncResult completes.

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

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表すタスクを作成します。Creates a task that represents a pair of begin and end methods that conform to the Asynchronous Programming Model pattern.

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

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表すタスクを作成します。Creates a task that represents a pair of begin and end methods that conform to the Asynchronous Programming Model pattern.

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

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表すタスクを作成します。Creates a task that represents a pair of begin and end methods that conform to the Asynchronous Programming Model pattern.

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

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表すタスクを作成します。Creates a task that represents a pair of begin and end methods that conform to the Asynchronous Programming Model pattern.

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

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表すタスクを作成します。Creates a task that represents a pair of begin and end methods that conform to the Asynchronous Programming Model pattern.

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

非同期プログラミング モデルのパターンに準拠した開始メソッドと終了メソッドの組み合わせを表すタスクを作成します。Creates a task that represents a pair of begin and end methods that conform to the Asynchronous Programming Model pattern.

GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)
StartNew(Func<Object,TResult>, Object)

タスクを作成して開始します。Creates and starts a task.

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

タスクを作成して開始します。Creates and starts a task.

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

タスクを作成して開始します。Creates and starts a task.

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

タスクを作成して開始します。Creates and starts a task.

StartNew(Func<TResult>)

タスクを作成して開始します。Creates and starts a task.

StartNew(Func<TResult>, CancellationToken)

タスクを作成して開始します。Creates and starts a task.

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

タスクを作成して開始します。Creates and starts a task.

StartNew(Func<TResult>, TaskCreationOptions)

タスクを作成して開始します。Creates and starts a task.

ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(継承元 Object)

適用対象

スレッド セーフ

のすべてのパブリックメンバーとプロテクトメンバー TaskFactory<TResult> はスレッドセーフであり、複数のスレッドから同時に使用できます。All public and protected members of TaskFactory<TResult> are thread-safe and may be used concurrently from multiple threads.

こちらもご覧ください