Поделиться через


TaskFactory Класс

Определение

Предоставляет поддержку создания и планирования Task объектов.

public ref class TaskFactory
public class TaskFactory
type TaskFactory = class
Public Class TaskFactory
Наследование
TaskFactory

Примеры

В следующем примере для выполнения двух вызовов TaskFactory.StartNew метода используется статическое Factory свойство. Первый заполняет массив именами файлов в каталоге 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.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, TaskCreationOptions, TaskContinuationOptions, TaskScheduler)

Инициализирует экземпляр с указанной TaskFactory конфигурацией.

TaskFactory(CancellationToken)

Инициализирует экземпляр с указанной TaskFactory конфигурацией.

TaskFactory(TaskCreationOptions, TaskContinuationOptions)

Инициализирует экземпляр с указанной TaskFactory конфигурацией.

TaskFactory(TaskScheduler)

Инициализирует экземпляр с указанной TaskFactory конфигурацией.

Свойства

Имя Описание
CancellationToken

Возвращает маркер отмены по умолчанию для этой фабрики задач.

ContinuationOptions

Возвращает параметры продолжения задачи по умолчанию для этой фабрики задач.

CreationOptions

Возвращает параметры создания задач по умолчанию для этой фабрики задач.

Scheduler

Возвращает планировщик задач по умолчанию для этой фабрики задач.

Методы

Имя Описание
ContinueWhenAll(Task[], Action<Task[]>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAll(Task[], Action<Task[]>, CancellationToken)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAll(Task[], Action<Task[]>, TaskContinuationOptions)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAll(Task[], Action<Task[]>)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, TaskContinuationOptions)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, CancellationToken)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, TaskContinuationOptions)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, CancellationToken)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, TaskContinuationOptions)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>)

Создает задачу продолжения, которая начинается при завершении набора указанных задач.

ContinueWhenAny(Task[], Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает продолжение Task , которое будет запущено после завершения любой задачи в предоставленном наборе.

ContinueWhenAny(Task[], Action<Task>, CancellationToken)

Создает продолжение Task , которое будет запущено после завершения любой задачи в предоставленном наборе.

ContinueWhenAny(Task[], Action<Task>, TaskContinuationOptions)

Создает продолжение Task , которое будет запущено после завершения любой задачи в предоставленном наборе.

ContinueWhenAny(Task[], Action<Task>)

Создает продолжение Task , которое будет запущено после завершения любой задачи в предоставленном наборе.

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает продолжение Task<TResult> , которое будет запущено после завершения любой задачи в предоставленном наборе.

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken)

Создает продолжение Task<TResult> , которое будет запущено после завершения любой задачи в предоставленном наборе.

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, TaskContinuationOptions)

Создает продолжение Task<TResult> , которое будет запущено после завершения любой задачи в предоставленном наборе.

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>)

Создает продолжение Task<TResult> , которое будет запущено после завершения любой задачи в предоставленном наборе.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает продолжение Task , которое будет запущено после завершения любой задачи в предоставленном наборе.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, CancellationToken)

Создает продолжение Task , которое будет запущено после завершения любой задачи в предоставленном наборе.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, TaskContinuationOptions)

Создает продолжение Task , которое будет запущено после завершения любой задачи в предоставленном наборе.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>)

Создает продолжение Task , которое будет запущено после завершения любой задачи в предоставленном наборе.

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Создает продолжение Task<TResult> , которое будет запущено после завершения любой задачи в предоставленном наборе.

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, CancellationToken)

Создает продолжение Task<TResult> , которое будет запущено после завершения любой задачи в предоставленном наборе.

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, TaskContinuationOptions)

Создает продолжение Task<TResult> , которое будет запущено после завершения любой задачи в предоставленном наборе.

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>)

Создает продолжение Task<TResult> , которое будет запущено после завершения любой задачи в предоставленном наборе.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, Object, TaskCreationOptions)

Task Создает пару методов начала и конца, соответствующих шаблону модели асинхронного программирования.

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

Task Создает пару методов начала и конца, соответствующих шаблону модели асинхронного программирования.

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

Task Создает действие конечного метода при завершении указанного IAsyncResult действия.

FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions)

Task Создает действие конечного метода при завершении указанного IAsyncResult действия.

FromAsync(IAsyncResult, Action<IAsyncResult>)

Task Создает действие конечного метода при завершении указанного IAsyncResult действия.

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,TResult>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object)

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

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

Task Создает пару методов начала и конца, соответствующих шаблону модели асинхронного программирования.

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

Task Создает пару методов начала и конца, соответствующих шаблону модели асинхронного программирования.

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

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

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

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

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

Task Создает пару методов начала и конца, соответствующих шаблону модели асинхронного программирования.

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

Task Создает пару методов начала и конца, соответствующих шаблону модели асинхронного программирования.

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

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

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

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

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

Task Создает пару методов начала и конца, соответствующих шаблону модели асинхронного программирования.

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

Task Создает пару методов начала и конца, соответствующих шаблону модели асинхронного программирования.

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

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

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

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

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

Task<TResult> Создает функцию конечного метода при завершении указанного IAsyncResult действия.

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

Task<TResult> Создает функцию конечного метода при завершении указанного IAsyncResult действия.

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

Task<TResult> Создает функцию конечного метода при завершении указанного IAsyncResult действия.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
StartNew(Action, CancellationToken, TaskCreationOptions, TaskScheduler)

Создает и запускает задачу для указанного делегата действия, маркера отмены, параметров создания и состояния.

StartNew(Action, CancellationToken)

Создает и запускает задачу для указанного делегата действия и маркера отмены.

StartNew(Action, TaskCreationOptions)

Создает и запускает задачу для указанных параметров делегата действия и создания.

StartNew(Action)

Создает и запускает задачу для указанного делегата действия.

StartNew(Action<Object>, Object, CancellationToken, TaskCreationOptions, TaskScheduler)

Создает и запускает задачу для указанного делегата действия, состояния, маркера отмены, параметров создания и планировщика задач.

StartNew(Action<Object>, Object, CancellationToken)

Создает и запускает задачу для указанного делегата действия, состояния и маркера отмены.

StartNew(Action<Object>, Object, TaskCreationOptions)

Создает и запускает задачу для указанных параметров делегата действия, состояния и создания.

StartNew(Action<Object>, Object)

Создает и запускает задачу для указанного делегата действия и состояния.

StartNew<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions, TaskScheduler)

Создает и запускает задачу типа TResult для указанного делегата функции, состояния, маркера отмены, параметров создания и планировщика задач.

StartNew<TResult>(Func<Object,TResult>, Object, CancellationToken)

Создает и запускает задачу типа TResult для указанного делегата функции, состояния и маркера отмены.

StartNew<TResult>(Func<Object,TResult>, Object, TaskCreationOptions)

Создает и запускает задачу типа TResult для указанных делегатов функций, состояний и параметров создания.

StartNew<TResult>(Func<Object,TResult>, Object)

Создает и запускает задачу типа TResult для указанного делегата функции и состояния.

StartNew<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions, TaskScheduler)

Создает и запускает задачу типа TResult для указанного делегата функции, маркера отмены, параметров создания и планировщика задач.

StartNew<TResult>(Func<TResult>, CancellationToken)

Создает и запускает задачу типа TResult для указанного делегата функции и маркера отмены.

StartNew<TResult>(Func<TResult>, TaskCreationOptions)

Создает и запускает задачу типа TResult для указанных параметров делегата и создания функций.

StartNew<TResult>(Func<TResult>)

Создает и запускает задачу типа TResult для указанного делегата функции.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к

Потокобезопасность

Все общедоступные и защищенные элементы TaskFactory являются потокобезопасными и могут использоваться одновременно из нескольких потоков.

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