TaskFactory Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje podporu pro vytváření a plánování Task objektů.
public ref class TaskFactory
public class TaskFactory
type TaskFactory = class
Public Class TaskFactory
- Dědičnost
-
TaskFactory
Příklady
Následující příklad používá statickou Factory vlastnost k provedení dvou volání TaskFactory.StartNew metody. První naplní pole názvy souborů v adresáři MyDocuments uživatele, zatímco druhý naplní pole názvy podadresářů adresáře MyDocuments uživatele. Potom zavolá metodu TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) , která zobrazí informace o počtu souborů a adresářů ve dvou polích po dokončení provádění prvních dvou úkolů.
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
Poznámky
.NET poskytuje dvě továrny pro vytváření a plánování úloh:
Třída TaskFactory , která vytváří Task a Task<TResult> objekty. Přetížení této metody můžete volat k vytvoření a spuštění úlohy, která vyžaduje jiné než výchozí argumenty.
Výstraha
Počínaje rozhraním .NET Framework 4.5 poskytuje metoda nejjednodušší způsob, Task.Run jak vytvořit úlohu s výchozími hodnotami konfigurace a okamžitě ji spustit.
Třída TaskFactory<TResult> , která vytváří Task<TResult> objekty.
Třída TaskFactory umožňuje provádět následující akce:
Vytvořte úlohu a okamžitě ji spusťte voláním StartNew metody.
Výstraha
Počínaje rozhraním .NET Framework 4.5 poskytuje metoda nejjednodušší způsob, Task.Run jak vytvořit úlohu s výchozími hodnotami konfigurace a okamžitě ji spustit.
Vytvořte úlohu, která se spustí, když některý z úkolů v poli dokončí voláním ContinueWhenAny metody.
Vytvořte úlohu, která se spustí, když se dokončí všechny úkoly v poli voláním ContinueWhenAll metody.
Statická Task<TResult>.Factory vlastnost vrátí výchozí TaskFactory<TResult> objekt. Můžete také volat jeden z TaskFactory konstruktorů třídy ke konfiguraci Task objektů, které TaskFactory třída vytvoří. Následující příklad nakonfiguruje nový TaskFactory objekt pro vytvoření úkolů, které mají zadaný token zrušení, možnosti vytvoření úkolu, možnosti pokračování a přizpůsobený plánovač úloh.
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
Ve většině případů nemusíte vytvořit instanci nové TaskFactory instance. Místo toho můžete použít Task.Factory vlastnost, která vrací objekt továrny, který používá výchozí hodnoty. Potom můžete volat jeho metody pro zahájení nových úkolů nebo definovat pokračování úkolu. Obrázek najdete v příkladu.
Konstruktory
| Name | Description |
|---|---|
| TaskFactory() |
Inicializuje TaskFactory instanci s výchozí konfigurací. |
| TaskFactory(CancellationToken, TaskCreationOptions, TaskContinuationOptions, TaskScheduler) |
Inicializuje TaskFactory instanci se zadanou konfigurací. |
| TaskFactory(CancellationToken) |
Inicializuje TaskFactory instanci se zadanou konfigurací. |
| TaskFactory(TaskCreationOptions, TaskContinuationOptions) |
Inicializuje TaskFactory instanci se zadanou konfigurací. |
| TaskFactory(TaskScheduler) |
Inicializuje TaskFactory instanci se zadanou konfigurací. |
Vlastnosti
| Name | Description |
|---|---|
| CancellationToken |
Získá výchozí token zrušení pro tuto továrnu úloh. |
| ContinuationOptions |
Získá výchozí možnosti pokračování úkolu pro tuto úlohu factory. |
| CreationOptions |
Získá výchozí možnosti vytváření úloh pro tuto továrnu úloh. |
| Scheduler |
Získá výchozí plánovač úloh pro tuto továrnu úloh. |
Metody
Platí pro
Bezpečný přístup z více vláken
Všechny veřejné a chráněné členy TaskFactory jsou bezpečné pro přístup z více vláken a mohou být použity souběžně z více vláken.