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


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>

Примеры

В следующем примере для выполнения двух вызовов TaskFactory<TResult>.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<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 , метод предоставляет самый простой способ создать задачу со значениями конфигурации по умолчанию и сразу же запустить ее.

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

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

Статическое 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, TaskCreationOptions, TaskContinuationOptions, TaskScheduler)

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

TaskFactory<TResult>(CancellationToken)

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

TaskFactory<TResult>(TaskCreationOptions, TaskContinuationOptions)

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

TaskFactory<TResult>(TaskScheduler)

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

Свойства

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

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

ContinuationOptions

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

CreationOptions

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

Scheduler

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

Методы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Equals(Object)

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

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

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

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

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

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

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

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

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

FromAsync(IAsyncResult, Func<IAsyncResult,TResult>)

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

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

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

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

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

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

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

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

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

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

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

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

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

GetHashCode()

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

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

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

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

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

(Унаследовано от Object)
StartNew(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions, TaskScheduler)

Создает и запускает задачу.

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

Создает и запускает задачу.

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

Создает и запускает задачу.

StartNew(Func<Object,TResult>, Object)

Создает и запускает задачу.

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

Создает и запускает задачу.

StartNew(Func<TResult>, CancellationToken)

Создает и запускает задачу.

StartNew(Func<TResult>, TaskCreationOptions)

Создает и запускает задачу.

StartNew(Func<TResult>)

Создает и запускает задачу.

ToString()

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

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

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

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

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

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