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