TaskFactory<TResult> Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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 , która tworzy Task obiekty i Task<TResult> .
Klasa TaskFactory<TResult> , która tworzy Task<TResult> obiekty.
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.