TaskFactory 类

定义

提供对创建和计划 Task 对象的支持。

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

示例

以下示例使用静态 Factory 属性对该方法进行两次调用 TaskFactory.StartNew 。 第一个用用户 MyDocuments 目录中的文件名称填充数组,第二个数组使用用户的 MyDocuments 目录的子目录的名称填充数组。 然后,它会调用 TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) 该方法,该方法显示前两个任务完成执行后两个数组中的文件和目录数的相关信息。

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 提供两个工厂用于创建和计划任务:

  • 创建TaskFactoryTask<TResult>对象的类Task。 可以调用此方法的重载来创建和执行需要非默认参数的任务。

    警告

    从 .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 都是线程安全的,可以同时从多个线程使用。

另请参阅