TaskFactory クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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 |
このタスク ファクトリのデフォルト タスク スケジューラを取得します。 |
メソッド
適用対象
スレッド セーフ
パブリックメンバーとプロテクトメンバーはすべてスレッドセーフであり、複数の TaskFactory スレッドから同時に使用できます。