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 。 第一个任务返回一个字符串数组,该数组使用用户的 MyDocuments 目录中的文件的名称填充,第二个任务返回一个字符串数组,该数组填充了用户的 MyDocuments 目录的子目录的名称。 然后,它调用 TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) 方法,该方法显示有关两个任务完成执行后返回的数组中的文件和目录数的信息。

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

TaskFactory<TResult> 允许执行以下操作:

  • 创建一个任务,并通过调用 StartNew 方法立即启动它。 可以调用此方法的重载来创建和执行需要非默认参数的任务。

    警告

    从 .NET Framework 4.5 开始,Task.Run该方法提供了使用默认配置值创建任务并立即启动的最简单方法。

  • 创建一个任务,该任务通过调用 ContinueWhenAnyContinueWhenAny 方法在数组中的任何一个任务完成时启动。

  • 创建一个任务,该任务通过调用 ContinueWhenAllContinueWhenAll 方法在数组中的所有任务完成时启动。

静态 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> 都是线程安全的,并且可以从多个线程并发使用。

另请参阅