TaskFactory Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет поддержку создания и планирования Task объектов.
public ref class TaskFactory
public class TaskFactory
type TaskFactory = class
Public Class TaskFactory
- Наследование
-
TaskFactory
Примеры
В следующем примере для выполнения двух вызовов TaskFactory.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[] 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.5 Task.Run , метод предоставляет самый простой способ создать задачу со значениями конфигурации по умолчанию и сразу же запустить ее.
Класс TaskFactory<TResult> , который создает Task<TResult> объекты.
Класс TaskFactory позволяет выполнять следующие действия:
Создайте задачу и запустите ее немедленно, вызвав StartNew метод.
Предупреждение
Начиная с .NET Framework 4.5 Task.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, TaskCreationOptions, TaskContinuationOptions, TaskScheduler) |
Инициализирует экземпляр с указанной TaskFactory конфигурацией. |
| TaskFactory(CancellationToken) |
Инициализирует экземпляр с указанной TaskFactory конфигурацией. |
| TaskFactory(TaskCreationOptions, TaskContinuationOptions) |
Инициализирует экземпляр с указанной TaskFactory конфигурацией. |
| TaskFactory(TaskScheduler) |
Инициализирует экземпляр с указанной TaskFactory конфигурацией. |
Свойства
| Имя | Описание |
|---|---|
| CancellationToken |
Возвращает маркер отмены по умолчанию для этой фабрики задач. |
| ContinuationOptions |
Возвращает параметры продолжения задачи по умолчанию для этой фабрики задач. |
| CreationOptions |
Возвращает параметры создания задач по умолчанию для этой фабрики задач. |
| Scheduler |
Возвращает планировщик задач по умолчанию для этой фабрики задач. |
Методы
Применяется к
Потокобезопасность
Все общедоступные и защищенные элементы TaskFactory являются потокобезопасными и могут использоваться одновременно из нескольких потоков.