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) |
Создает и запускает задачу типа |
StartNew<TResult>(Func<Object,TResult>, Object, CancellationToken) |
Создает и запускает задачу типа |
StartNew<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions, TaskScheduler) |
Создает и запускает задачу типа |
StartNew<TResult>(Func<Object,TResult>, Object, TaskCreationOptions) |
Создает и запускает задачу типа |
StartNew<TResult>(Func<TResult>) |
Создает и запускает задачу типа |
StartNew<TResult>(Func<TResult>, CancellationToken) |
Создает и запускает задачу типа |
StartNew<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions, TaskScheduler) |
Создает и запускает задачу типа |
StartNew<TResult>(Func<TResult>, TaskCreationOptions) |
Создает и запускает задачу типа |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Применяется к
Потокобезопасность
Все открытые и защищенные элементы TaskFactory являются потокобезопасными и могут использоваться одновременно из нескольких потоков.