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


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

  • Создайте задачу, которая запускается после завершения любой из задач в массиве путем вызова 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)

Инициализирует экземпляр 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)

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

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

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

FromAsync(IAsyncResult, Func<IAsyncResult,TResult>)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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> являются потокобезопасными и могут использоваться одновременно из нескольких потоков.

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