Sdílet prostřednictvím


TaskFactory<TResult> Třída

Definice

Poskytuje podporu pro vytváření a plánování Task<TResult> objektů.

generic <typename TResult>
public ref class TaskFactory
public class TaskFactory<TResult>
type TaskFactory<'Result> = class
Public Class TaskFactory(Of TResult)

Parametry typu

TResult

Návratová Task<TResult> hodnota objektů, které metody této třídy vytvářejí.

Dědičnost
TaskFactory<TResult>

Příklady

Následující příklad používá statickou Factory vlastnost k provedení dvou volání TaskFactory<TResult>.StartNew metody. První úloha vrátí pole řetězců naplněné názvy souborů v adresáři MyDocuments uživatele, zatímco druhá vrátí pole řetězců, které je naplněné 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ářů v polích vrácených dvěma úkoly po dokončení provádění.

using System;
using System.IO;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      Task<string[]>[] tasks = new Task<string[]>[2];
      String docsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

      tasks[0] = Task<string[]>.Factory.StartNew( () => Directory.GetFiles(docsDirectory));
      tasks[1] = Task<string[]>.Factory.StartNew( () => Directory.GetDirectories(docsDirectory));

      Task.Factory.ContinueWhenAll(tasks, completedTasks => {
                                             Console.WriteLine("{0} contains: ", docsDirectory);
                                             Console.WriteLine("   {0} subdirectories", tasks[1].Result.Length);
                                             Console.WriteLine("   {0} files", tasks[0].Result.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(Of String())
      Dim docsDirectory As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
      
      tasks(0) = Task(Of String()).Factory.StartNew( Function()Directory.GetFiles(docsDirectory) )
''                                        End Sub )
      tasks(1) = Task(Of String()).Factory.StartNew( Function() Directory.GetDirectories(docsDirectory) )
''                                        End Sub )
      Task.Factory.ContinueWhenAll(tasks, Sub(completedTasks)
                                             Console.WriteLine("{0} contains: ", docsDirectory)
                                             Console.WriteLine("   {0} subdirectories", tasks(1).Result.Length)
                                             Console.WriteLine("   {0} files", tasks(0).Result.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<TResult> umožňuje provádět následující akce:

  • Vytvořte úkol a spusťte ho StartNew okamžitě voláním metody. Můžete volat přetížení této metody vytvořit a spustit úlohu, 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.

  • Vytvořte úlohu, která se spustí, když některý z úkolů v poli dokončí voláním ContinueWhenAny nebo ContinueWhenAny metodou.

  • Vytvořte úlohu, která se spustí, když se dokončí všechny úkoly v poli voláním ContinueWhenAll nebo ContinueWhenAll metodou.

Statická Task<TResult>.Factory vlastnost vrátí výchozí TaskFactory<TResult> objekt. Můžete také volat jeden z TaskFactory<TResult> konstruktorů třídy ke konfiguraci Task<TResult> objektů, které TaskFactory<TResult> třída vytvoří. Následující příklad nakonfiguruje nový TaskFactory<TResult> 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;

public class Example
{
   static CancellationTokenSource cts = new CancellationTokenSource();

   static TaskFactory<int> factory = new TaskFactory<int>(
      cts.Token,
      TaskCreationOptions.PreferFairness,
      TaskContinuationOptions.ExecuteSynchronously,
      new CustomScheduler());

   static void Main()
   {
      var t2 = factory.StartNew(() => DoWork());
      cts.Dispose();
   }

   static int DoWork()
   {
       /*...*/
       return DateTime.Now.Hour <= 12 ?  1 : 2;
    }
}
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(Of Integer)(
                         cts.Token,
                         TaskCreationOptions.PreferFairness,
                         TaskContinuationOptions.ExecuteSynchronously,
                         New CustomScheduler())

      Dim t2 = factory.StartNew(Function() DoWork())
      cts.Dispose()
   End Sub

   Function DoWork() As Integer
      Return If(Date.Now.Hour <= 12, 1, 2)
   End Function
End Module

Ve většině případů nemusíte vytvořit instanci nové TaskFactory<TResult> instance. Místo toho můžete použít statickou Task<TResult>.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 definování pokračování úkolů. Příklad najdete na obrázku.

Konstruktory

TaskFactory<TResult>()

Inicializuje TaskFactory<TResult> instanci s výchozí konfigurací.

TaskFactory<TResult>(CancellationToken)

Inicializuje TaskFactory<TResult> instanci s výchozí konfigurací.

TaskFactory<TResult>(CancellationToken, TaskCreationOptions, TaskContinuationOptions, TaskScheduler)

Inicializuje TaskFactory<TResult> instanci se zadanou konfigurací.

TaskFactory<TResult>(TaskCreationOptions, TaskContinuationOptions)

Inicializuje TaskFactory<TResult> instanci se zadanou konfigurací.

TaskFactory<TResult>(TaskScheduler)

Inicializuje TaskFactory<TResult> instanci se zadanou konfigurací.

Vlastnosti

CancellationToken

Získá výchozí token zrušení pro tuto továrnu úloh.

ContinuationOptions

Získá hodnotu výčtu pro tuto továrnu TaskContinuationOptions úloh.

CreationOptions

Získá hodnotu výčtu pro tuto továrnu TaskCreationOptions úloh.

Scheduler

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

Metody

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Vytvoří úkol pokračování, 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>, Func<IAsyncResult,TResult>, Object)

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

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

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

FromAsync(IAsyncResult, Func<IAsyncResult,TResult>)

Vytvoří úlohu, která po dokončení provede funkci IAsyncResult koncové metody.

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

Vytvoří úlohu, která spustí funkci koncové metody po dokončení zadané IAsyncResult metody.

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

Vytvoří úlohu, která spustí funkci koncové metody po dokončení zadané IAsyncResult metody.

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

Vytvoří úlohu, která představuje 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>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object, TaskCreationOptions)

Vytvoří úlohu, která představuje 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>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object)

Vytvoří úlohu, která představuje 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>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object, TaskCreationOptions)

Vytvoří úlohu, která představuje 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>, Func<IAsyncResult,TResult>, TArg1, Object)

Vytvoří úlohu, která představuje 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>, Func<IAsyncResult,TResult>, TArg1, Object, TaskCreationOptions)

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

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(Func<Object,TResult>, Object)

Vytvoří a spustí úlohu.

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

Vytvoří a spustí úlohu.

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

Vytvoří a spustí úlohu.

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

Vytvoří a spustí úlohu.

StartNew(Func<TResult>)

Vytvoří a spustí úlohu.

StartNew(Func<TResult>, CancellationToken)

Vytvoří a spustí úlohu.

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

Vytvoří a spustí úlohu.

StartNew(Func<TResult>, TaskCreationOptions)

Vytvoří a spustí úlohu.

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<TResult> jsou bezpečné pro přístup z více vláken a mohou být použity souběžně z více vláken.

Viz také