Task.Factory 属性

定义

提供对用于创建和配置 TaskTask<TResult> 实例的工厂方法的访问。

public:
 static property System::Threading::Tasks::TaskFactory ^ Factory { System::Threading::Tasks::TaskFactory ^ get(); };
public static System.Threading.Tasks.TaskFactory Factory { get; }
member this.Factory : System.Threading.Tasks.TaskFactory
Public Shared ReadOnly Property Factory As TaskFactory

属性值

TaskFactory

一个工厂对象,可创建多种 TaskTask<TResult> 对象。

注解

此属性返回与通过调用无TaskFactory.TaskFactory()参数构造函数创建的类的默认实例TaskFactory相同。 它具有以下属性值:

Property “值”
TaskFactory.CancellationToken CancellationToken.None
TaskFactory.ContinuationOptions TaskContinuationOptions.None
TaskFactory.CreationOptions TaskCreationOptions.None
TaskFactory.Scheduler null、或 TaskScheduler.Current

此属性的最常见用途是在对方法的单个调用 TaskFactory.StartNew 中创建和启动一个新任务。

备注

从 .NET Framework 4.5 开始,该方法Task.Run提供了创建具有默认配置值的对象的最简单方法Task

以下示例使用静态 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

适用于

另请参阅