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 предоставляет две фабрики для создания и планирования задач:

  • Класс TaskFactory , который создает Task и Task<TResult> создает объекты. Вы можете вызвать перегрузки этого метода для создания и выполнения задачи, требующей аргументов, отличных от аргументов по умолчанию.

    Предупреждение

    Начиная с версии платформа .NET Framework 4.5Task.Run, метод предоставляет самый простой способ создать задачу со значениями конфигурации по умолчанию и немедленно запустить ее.

  • Класс TaskFactory<TResult> , который создает Task<TResult> объекты.

Класс TaskFactory позволяет выполнять следующие действия:

  • Создайте задачу и запустите ее немедленно, вызвав StartNew метод.

    Предупреждение

    Начиная с версии платформа .NET Framework 4.5Task.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, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

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

Создает объект Task, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

FromAsync(IAsyncResult, Action<IAsyncResult>)

Создает объект Task, который выполняет действие метода End по завершении заданного объекта IAsyncResult.

FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions)

Создает объект Task, который выполняет действие метода End по завершении заданного объекта IAsyncResult.

FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions, TaskScheduler)

Создает объект Task, который выполняет действие метода End по завершении заданного объекта IAsyncResult.

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

Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

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

Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

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

Создает объект Task, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

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

Создает объект Task, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

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

Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

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

Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

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

Создает объект Task, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

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

Создает объект Task, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

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

Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

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

Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

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

Создает объект Task, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

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

Создает объект Task, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

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

Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

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

Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования.

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

Создает объект Task<TResult>, который выполняет функцию метода End по завершении заданного объекта IAsyncResult.

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

Создает объект Task<TResult>, который выполняет функцию метода End по завершении заданного объекта IAsyncResult.

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

Создает объект Task<TResult>, который выполняет функцию метода End по завершении заданного объекта 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 являются потокобезопасными и могут использоваться одновременно из нескольких потоков.

См. также раздел