Udostępnij za pośrednictwem


TaskFactory<TResult> Klasa

Definicja

Zapewnia obsługę tworzenia i planowania Task<TResult> obiektów.

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

Parametry typu

TResult

Zwracana wartość Task<TResult> obiektów tworzonych przez metody tej klasy.

Dziedziczenie
TaskFactory<TResult>

Przykłady

W poniższym przykładzie użyto właściwości statycznej Factory do wykonania dwóch wywołań TaskFactory<TResult>.StartNew metody . Pierwsze zadanie zwraca tablicę ciągów wypełniona nazwami plików w katalogu MyDocuments użytkownika, a druga zwraca tablicę ciągów wypełniona nazwami podkatalogów katalogu MyDocuments użytkownika. Następnie wywołuje metodę TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) , która wyświetla informacje o liczbie plików i katalogów w tablicach zwracanych przez dwa zadania po zakończeniu wykonywania.

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

Uwagi

Platforma .NET udostępnia dwie fabryki do tworzenia i planowania zadań:

Klasa TaskFactory<TResult> umożliwia wykonanie następujących czynności:

  • Utwórz zadanie i uruchom je natychmiast, wywołując metodę StartNew . Można wywołać przeciążenia tej metody, aby utworzyć i wykonać zadanie, które wymaga argumentów innych niż domyślne.

    Ostrzeżenie

    Począwszy od .NET Framework 4.5, Task.Run metoda zapewnia najprostszy sposób utworzenia zadania z domyślnymi wartościami konfiguracji i natychmiastowego uruchomienia.

  • Utwórz zadanie uruchamiane po zakończeniu jednego z zadań w tablicy przez wywołanie ContinueWhenAny metody or ContinueWhenAny .

  • Utwórz zadanie uruchamiane po zakończeniu wszystkich zadań w tablicy przez wywołanie ContinueWhenAll metody or ContinueWhenAll .

Właściwość statyczna Task<TResult>.Factory zwraca obiekt domyślny TaskFactory<TResult> . Można również wywołać jeden z TaskFactory<TResult> konstruktorów klasy, aby skonfigurować Task<TResult> obiekty tworzone przez klasę TaskFactory<TResult> . Poniższy przykład umożliwia skonfigurowanie nowego TaskFactory<TResult> obiektu w celu utworzenia zadań z określonym tokenem anulowania, opcjami tworzenia zadań, opcjami kontynuacji i dostosowanym harmonogramem zadań.

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

W większości przypadków nie trzeba utworzyć wystąpienia nowego TaskFactory<TResult> wystąpienia. Zamiast tego można użyć właściwości statycznej Task<TResult>.Factory , która zwraca obiekt fabryki, który używa wartości domyślnych. Następnie można wywołać jego metody, aby uruchomić nowe zadania lub zdefiniować kontynuacje zadań. Aby zapoznać się z ilustracją, zobacz przykład.

Konstruktory

TaskFactory<TResult>()

Inicjuje TaskFactory<TResult> wystąpienie z konfiguracją domyślną.

TaskFactory<TResult>(CancellationToken)

Inicjuje TaskFactory<TResult> wystąpienie z konfiguracją domyślną.

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

Inicjuje TaskFactory<TResult> wystąpienie z określoną konfiguracją.

TaskFactory<TResult>(TaskCreationOptions, TaskContinuationOptions)

Inicjuje TaskFactory<TResult> wystąpienie z określoną konfiguracją.

TaskFactory<TResult>(TaskScheduler)

Inicjuje TaskFactory<TResult> wystąpienie z określoną konfiguracją.

Właściwości

CancellationToken

Pobiera domyślny token anulowania dla tej fabryki zadań.

ContinuationOptions

TaskContinuationOptions Pobiera wartość wyliczenia dla tej fabryki zadań.

CreationOptions

TaskCreationOptions Pobiera wartość wyliczenia dla tej fabryki zadań.

Scheduler

Pobiera harmonogram zadań dla tej fabryki zadań.

Metody

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu zestawu udostępnionych zadań.

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu zestawu udostępnionych zadań.

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu zestawu udostępnionych zadań.

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu zestawu udostępnionych zadań.

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu zestawu udostępnionych zadań.

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu zestawu udostępnionych zadań.

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu zestawu udostępnionych zadań.

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu zestawu udostępnionych zadań.

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu dowolnego zadania w podanym zestawie.

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu dowolnego zadania w podanym zestawie.

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu dowolnego zadania w podanym zestawie.

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu dowolnego zadania w podanym zestawie.

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu dowolnego zadania w podanym zestawie.

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu dowolnego zadania w podanym zestawie.

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu dowolnego zadania w podanym zestawie.

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

Tworzy zadanie kontynuacji, które zostanie uruchomione po zakończeniu dowolnego zadania w podanym zestawie.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

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

Tworzy zadanie reprezentujące parę metod początkowych i końcowych, które są zgodne ze wzorcem asynchronicznego modelu programowania.

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

Tworzy zadanie reprezentujące parę metod początkowych i końcowych, które są zgodne ze wzorcem asynchronicznego modelu programowania.

FromAsync(IAsyncResult, Func<IAsyncResult,TResult>)

Tworzy zadanie, które wykonuje funkcję metody końcowej po zakończeniu określonego IAsyncResult .

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

Tworzy zadanie, które wykonuje funkcję metody końcowej po zakończeniu określonego IAsyncResult .

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

Tworzy zadanie, które wykonuje funkcję metody końcowej po zakończeniu określonego IAsyncResult .

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

Tworzy zadanie reprezentujące parę metod początkowych i końcowych, które są zgodne ze wzorcem asynchronicznego modelu programowania.

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

Tworzy zadanie reprezentujące parę metod początkowych i końcowych, które są zgodne ze wzorcem asynchronicznego modelu programowania.

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

Tworzy zadanie reprezentujące parę metod początkowych i końcowych, które są zgodne ze wzorcem asynchronicznego modelu programowania.

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

Tworzy zadanie reprezentujące parę metod początkowych i końcowych, które są zgodne ze wzorcem asynchronicznego modelu programowania.

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

Tworzy zadanie reprezentujące parę metod początkowych i końcowych, które są zgodne ze wzorcem asynchronicznego modelu programowania.

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

Tworzy zadanie reprezentujące parę metod początkowych i końcowych, które są zgodne ze wzorcem asynchronicznego modelu programowania.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

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

Tworzy i uruchamia zadanie.

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

Tworzy i uruchamia zadanie.

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

Tworzy i uruchamia zadanie.

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

Tworzy i uruchamia zadanie.

StartNew(Func<TResult>)

Tworzy i uruchamia zadanie.

StartNew(Func<TResult>, CancellationToken)

Tworzy i uruchamia zadanie.

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

Tworzy i uruchamia zadanie.

StartNew(Func<TResult>, TaskCreationOptions)

Tworzy i uruchamia zadanie.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy

Bezpieczeństwo wątkowe

Wszystkie publiczne i chronione elementy członkowskie są TaskFactory<TResult> bezpieczne wątkowo i mogą być używane współbieżnie z wielu wątków.

Zobacz też