次の方法で共有


TaskFactory<TResult> クラス

定義

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

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

型パラメーター

TResult

このクラスのメソッドによって作成される Task<TResult> オブジェクトの戻り値。

継承
TaskFactory<TResult>

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

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 には、タスクを作成およびスケジュールするための 2 つのファクトリが用意されています。

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

  • タスクを作成し、メソッドを呼び出 StartNew してすぐに開始します。 このメソッドのオーバーロードを呼び出して、既定以外の引数を必要とするタスクを作成して実行できます。

    警告

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

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

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

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

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

コンストラクター

TaskFactory<TResult>()

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

TaskFactory<TResult>(CancellationToken)

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

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

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

TaskFactory<TResult>(TaskCreationOptions, TaskContinuationOptions)

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

TaskFactory<TResult>(TaskScheduler)

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

プロパティ

CancellationToken

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

ContinuationOptions

このタスク ファクトリの TaskContinuationOptions 列挙値を取得します。

CreationOptions

このタスク ファクトリの TaskCreationOptions 列挙値を取得します。

Scheduler

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

メソッド

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Equals(Object)

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

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

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

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

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

FromAsync(IAsyncResult, Func<IAsyncResult,TResult>)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

GetHashCode()

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

(継承元 Object)
GetType()

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

(継承元 Object)
MemberwiseClone()

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

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

タスクを作成して開始します。

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

タスクを作成して開始します。

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

タスクを作成して開始します。

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

タスクを作成して開始します。

StartNew(Func<TResult>)

タスクを作成して開始します。

StartNew(Func<TResult>, CancellationToken)

タスクを作成して開始します。

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

タスクを作成して開始します。

StartNew(Func<TResult>, TaskCreationOptions)

タスクを作成して開始します。

ToString()

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

(継承元 Object)

適用対象

スレッド セーフ

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

こちらもご覧ください