Sdílet prostřednictvím


TaskFactory Třída

Definice

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 volá metodu TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) , která zobrazuje informace o počtu souborů a adresářů ve dvou polích po dokončení prvního provedení 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í úkolů:

  • 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.

    Upozornění

    Počínaje .NET Framework 4.5 Task.Run poskytuje metoda nejjednodušší způsob, 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 úkol a spusťte ho StartNew okamžitě voláním metody.

    Upozornění

    Počínaje .NET Framework 4.5 Task.Run poskytuje metoda nejjednodušší způsob, jak vytvořit úlohu s výchozími hodnotami konfigurace a okamžitě ji spustit.

  • Vytvořte úlohu, která začíná, když některý z úkolů v poli dokončil voláním ContinueWhenAny metody.

  • Vytvořte úlohu, která začíná, když jsou všechny úkoly v poli dokončeny 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č úkolů.

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á vrátí objekt továrny, který používá výchozí hodnoty. Pak můžete volat jeho metody pro zahájení nových úkolů nebo definovat pokračování úkolů. Obrázek najdete v příkladu.

Konstruktory

TaskFactory()

Inicializuje TaskFactory instanci s výchozí konfigurací.

TaskFactory(CancellationToken)

Inicializuje TaskFactory instanci se zadanou konfigurací.

TaskFactory(CancellationToken, TaskCreationOptions, TaskContinuationOptions, TaskScheduler)

Inicializuje TaskFactory instanci se zadanou konfigurací.

TaskFactory(TaskCreationOptions, TaskContinuationOptions)

Inicializuje TaskFactory instanci se zadanou konfigurací.

TaskFactory(TaskScheduler)

Inicializuje TaskFactory instanci se zadanou konfigurací.

Vlastnosti

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 továrnu úkolů.

CreationOptions

Získá výchozí možnosti vytváření úkolů pro tuto továrnu úkolů.

Scheduler

Získá výchozí plánovač úloh pro tuto továrnu úloh.

Metody

ContinueWhenAll(Task[], Action<Task[]>)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAll(Task[], Action<Task[]>, CancellationToken)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAll(Task[], Action<Task[]>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAll(Task[], Action<Task[]>, TaskContinuationOptions)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, TaskContinuationOptions)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, CancellationToken)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, TaskContinuationOptions)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, CancellationToken)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, TaskContinuationOptions)

Vytvoří úlohu pokračování, která začíná po dokončení sady zadaných úkolů.

ContinueWhenAny(Task[], Action<Task>)

Vytvoří pokračování Task , které se spustí po dokončení libovolného úkolu v zadané sadě.

ContinueWhenAny(Task[], Action<Task>, CancellationToken)

Vytvoří pokračování Task , které se spustí po dokončení libovolného úkolu v zadané sadě.

ContinueWhenAny(Task[], Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Vytvoří pokračování Task , které se spustí po dokončení libovolného úkolu v zadané sadě.

ContinueWhenAny(Task[], Action<Task>, TaskContinuationOptions)

Vytvoří pokračování Task , které se spustí po dokončení libovolného úkolu v zadané sadě.

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>)

Vytvoří pokračování Task<TResult> , které se spustí po dokončení libovolného úkolu v zadané sadě.

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken)

Vytvoří pokračování Task<TResult> , které se spustí po dokončení libovolného úkolu v zadané sadě.

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Vytvoří pokračování Task<TResult> , které se spustí po dokončení libovolného úkolu v zadané sadě.

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, TaskContinuationOptions)

Vytvoří pokračování Task<TResult> , které se spustí po dokončení libovolného úkolu v zadané sadě.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>)

Vytvoří pokračování Task , které se spustí po dokončení libovolného úkolu v zadané sadě.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, CancellationToken)

Vytvoří pokračování Task , které se spustí po dokončení libovolného úkolu v zadané sadě.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Vytvoří pokračování Task , které se spustí po dokončení libovolného úkolu v zadané sadě.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, TaskContinuationOptions)

Vytvoří pokračování Task , které se spustí po dokončení libovolného úkolu v zadané sadě.

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>)

Vytvoří pokračování Task<TResult> , které se spustí po dokončení libovolného úkolu v zadané sadě.

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, CancellationToken)

Vytvoří pokračování Task<TResult> , které se spustí po dokončení libovolného úkolu v zadané sadě.

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Vytvoří pokračování Task<TResult> , které se spustí po dokončení libovolného úkolu v zadané sadě.

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, TaskContinuationOptions)

Vytvoří pokračování Task<TResult> , které se spustí po dokončení libovolného úkolu v zadané sadě.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, Object)

Task Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, Object, TaskCreationOptions)

Task Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync(IAsyncResult, Action<IAsyncResult>)

Task Vytvoří akci koncové metody po dokončení zadané IAsyncResult metody.

FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions)

Task Vytvoří akci koncové metody po dokončení zadané IAsyncResult metody.

FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions, TaskScheduler)

Task Vytvoří akci koncové metody po dokončení zadané IAsyncResult metody.

FromAsync<TArg1,TArg2,TArg3,TResult>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object)

Task<TResult> Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync<TArg1,TArg2,TArg3,TResult>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object, TaskCreationOptions)

Task<TResult> Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, TArg3, Object)

Task Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, TArg3, Object, TaskCreationOptions)

Task Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync<TArg1,TArg2,TResult>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object)

Task<TResult> Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync<TArg1,TArg2,TResult>(Func<TArg1,TArg2,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object, TaskCreationOptions)

Task<TResult> Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, Object)

Task Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, Object, TaskCreationOptions)

Task Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync<TArg1,TResult>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object)

Task<TResult> Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync<TArg1,TResult>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object, TaskCreationOptions)

Task<TResult> Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, Object)

Task Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, Object, TaskCreationOptions)

Task Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync<TResult>(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object)

Task<TResult> Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync<TResult>(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object, TaskCreationOptions)

Task<TResult> Vytvoří dvojici počátečních a koncových metod, které odpovídají vzoru asynchronního programovacího modelu.

FromAsync<TResult>(IAsyncResult, Func<IAsyncResult,TResult>)

Task<TResult> Vytvoří funkci koncové metody po dokončení zadané IAsyncResult metody.

FromAsync<TResult>(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions)

Task<TResult> Vytvoří funkci koncové metody po dokončení zadané IAsyncResult metody.

FromAsync<TResult>(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions, TaskScheduler)

Task<TResult> Vytvoří funkci koncové metody po dokončení zadané IAsyncResult metody.

GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetType()

Type Získá aktuální instanci.

(Zděděno od Object)
MemberwiseClone()

Vytvoří použádnou kopii aktuálního souboru Object.

(Zděděno od Object)
StartNew(Action)

Vytvoří a spustí úkol pro zadaný delegát akce.

StartNew(Action, CancellationToken)

Vytvoří a spustí úlohu pro zadaný delegát akce a token zrušení.

StartNew(Action, CancellationToken, TaskCreationOptions, TaskScheduler)

Vytvoří a spustí úlohu pro zadaného delegáta akce, token zrušení, možnosti vytvoření a stav.

StartNew(Action, TaskCreationOptions)

Vytvoří a spustí úlohu pro zadané možnosti delegáta a vytvoření akce.

StartNew(Action<Object>, Object)

Vytvoří a spustí úlohu pro zadaný delegát a stav akce.

StartNew(Action<Object>, Object, CancellationToken)

Vytvoří a spustí úlohu pro zadaný delegát akce, stav a token zrušení.

StartNew(Action<Object>, Object, CancellationToken, TaskCreationOptions, TaskScheduler)

Vytvoří a spustí úlohu pro zadaný delegát akce, stav, token zrušení, možnosti vytvoření a plánovač úkolů.

StartNew(Action<Object>, Object, TaskCreationOptions)

Vytvoří a spustí úlohu pro zadaného delegáta akce, stav a možnosti vytvoření.

StartNew<TResult>(Func<Object,TResult>, Object)

Vytvoří a spustí úlohu typu TResult pro zadaný delegát a stav funkce.

StartNew<TResult>(Func<Object,TResult>, Object, CancellationToken)

Vytvoří a spustí úlohu typu TResult pro zadaný delegát funkce, stav a token zrušení.

StartNew<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions, TaskScheduler)

Vytvoří a spustí úlohu typu TResult pro zadaný delegát funkce, stav, token zrušení, možnosti vytvoření a plánovač úloh.

StartNew<TResult>(Func<Object,TResult>, Object, TaskCreationOptions)

Vytvoří a spustí úlohu typu TResult pro zadané možnosti delegáta funkce, stavu a vytváření.

StartNew<TResult>(Func<TResult>)

Vytvoří a spustí úkol typu TResult pro zadaného delegáta funkce.

StartNew<TResult>(Func<TResult>, CancellationToken)

Vytvoří a spustí úlohu typu TResult pro zadaný delegát funkce a token zrušení.

StartNew<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions, TaskScheduler)

Vytvoří a spustí úlohu typu TResult pro zadaného delegáta funkce, token zrušení, možnosti vytvoření a plánovač úkolů.

StartNew<TResult>(Func<TResult>, TaskCreationOptions)

Vytvoří a spustí úlohu typu TResult pro zadaného delegáta funkce a možnosti vytváření.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

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 vlákno a mohou být používány souběžně z více vláken.

Viz také