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 , использующий значения по умолчанию. Затем можно вызвать его методы для запуска новых задач или определения продолжений задач. Пример см. на рисунке.
Task |
Инициализирует экземпляр TaskFactory с конфигурацией по умолчанию. |
Task |
Инициализирует экземпляр TaskFactory с заданной конфигурацией. |
Task |
Инициализирует экземпляр TaskFactory с заданной конфигурацией. |
Task |
Инициализирует экземпляр TaskFactory с заданной конфигурацией. |
Task |
Инициализирует экземпляр TaskFactory с заданной конфигурацией. |
Cancellation |
Возвращает токен отмены по умолчанию для этой фабрики задач. |
Continuation |
Получает параметры непрерывности задач по умолчанию для этой фабрики задач. |
Creation |
Возвращает параметры создания задач по умолчанию для этой фабрики задач. |
Scheduler |
Получает планировщик задач по умолчанию для этой фабрики задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает задачу продолжения, которая запускается при завершении набора заданных задач. |
Continue |
Создает продолжение задачи Task, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Continue |
Создает продолжение задачи Task, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Continue |
Создает продолжение задачи Task, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Continue |
Создает продолжение задачи Task, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Continue |
Создает продолжение задачи Task<TResult>, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Continue |
Создает продолжение задачи Task<TResult>, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Continue |
Создает продолжение задачи Task<TResult>, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Continue |
Создает продолжение задачи Task<TResult>, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Continue |
Создает продолжение задачи Task, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Continue |
Создает продолжение задачи Task, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Continue |
Создает продолжение задачи Task, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Continue |
Создает продолжение задачи Task, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Continue |
Создает продолжение задачи Task<TResult>, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Continue |
Создает продолжение задачи Task<TResult>, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Continue |
Создает продолжение задачи Task<TResult>, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Continue |
Создает продолжение задачи Task<TResult>, которое будет запущено после завершения выполнения любой задачи в указанном наборе. |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
From |
Создает объект Task, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task, который выполняет действие метода End по завершении заданного объекта IAsyncResult. |
From |
Создает объект Task, который выполняет действие метода End по завершении заданного объекта IAsyncResult. |
From |
Создает объект Task, который выполняет действие метода End по завершении заданного объекта IAsyncResult. |
From |
Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task<TResult>, который представляет пару методов begin и end, соответствующую шаблону модели асинхронного программирования. |
From |
Создает объект Task<TResult>, который выполняет функцию метода End по завершении заданного объекта IAsyncResult. |
From |
Создает объект Task<TResult>, который выполняет функцию метода End по завершении заданного объекта IAsyncResult. |
From |
Создает объект Task<TResult>, который выполняет функцию метода End по завершении заданного объекта IAsyncResult. |
Get |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
Get |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
Memberwise |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
Start |
Создает и запускает задачу для указанного делегата действия. |
Start |
Создает и запускает задачу для указанного делегата действия и токена отмены. |
Start |
Создает и запускает задачу для указанного делегата действия, маркера отмены, параметров создания и состояния. |
Start |
Создает и запускает задачу для указанных параметров делегата и создания действия. |
Start |
Создает и запускает задачу для указанного делегата и состояния действия. |
Start |
Создает и запускает задачу для указанного делегата действия, состояния и токена отмены. |
Start |
Создает и запускает задачу для указанного делегата действия, состояния, токена отмены, параметров создания и планировщика задач. |
Start |
Создает и запускает задачу для указанных параметров делегата действия, состояния и создания. |
Start |
Создает и запускает задачу типа |
Start |
Создает и запускает задачу типа |
Start |
Создает и запускает задачу типа |
Start |
Создает и запускает задачу типа |
Start |
Создает и запускает задачу типа |
Start |
Создает и запускает задачу типа |
Start |
Создает и запускает задачу типа |
Start |
Создает и запускает задачу типа |
To |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Все открытые и защищенные элементы TaskFactory являются потокобезопасными и могут использоваться одновременно из нескольких потоков.