TaskFactory<TResult> Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Bietet Unterstützung für das Erstellen und Planen von Task<TResult>-Objekten.
generic <typename TResult>
public ref class TaskFactory
public class TaskFactory<TResult>
type TaskFactory<'Result> = class
Public Class TaskFactory(Of TResult)
Typparameter
- TResult
Der Rückgabewert der Task<TResult>-Objekte, die von den Methoden dieser Klasse erstellt werden.
- Vererbung
-
TaskFactory<TResult>
Beispiele
Im folgenden Beispiel wird die statische Factory Eigenschaft verwendet, um zwei Aufrufe an die TaskFactory<TResult>.StartNew Methode vorzunehmen. Der erste Vorgang gibt ein Zeichenfolgenarray zurück, das mit den Namen von Dateien im Verzeichnis "MyDocuments" des Benutzers gefüllt wird, während der zweite ein Zeichenfolgenarray zurückgibt, das mit den Namen von Unterverzeichnissen des Ordners "MyDocuments" des Benutzers gefüllt wird. Anschließend wird die TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) Methode aufgerufen, die Informationen über die Anzahl der Dateien und Verzeichnisse in den von den beiden Vorgängen zurückgegebenen Arrays anzeigt, nachdem sie die Ausführung abgeschlossen haben.
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
Hinweise
.NET bietet zwei Fabriken zum Erstellen und Planen von Aufgaben:
Die TaskFactory Klasse, die erstellt und Objekte erstellt und Task<TResult> objekte erstelltTask.
Die TaskFactory<TResult> Klasse, die Objekte erstellt Task<TResult> .
Mit der TaskFactory<TResult> Klasse können Sie folgendes ausführen:
Erstellen Sie eine Aufgabe, und starten Sie sie sofort, indem Sie die StartNew Methode aufrufen. Sie können die Überladungen dieser Methode aufrufen, um eine Aufgabe zu erstellen und auszuführen, die nicht standardmäßige Argumente erfordert.
Warnung
Ab .NET Framework 4.5 bietet die Task.Run Methode die einfachste Möglichkeit, eine Aufgabe mit Standardkonfigurationswerten zu erstellen und sofort zu starten.
Erstellen Sie eine Aufgabe, die beginnt, wenn eine der Aufgaben in einem Array abgeschlossen ist, indem Sie die ContinueWhenAny ContinueWhenAny Methode aufrufen.
Erstellen Sie eine Aufgabe, die beginnt, wenn alle Vorgänge in einem Array abgeschlossen sind, indem Sie die ContinueWhenAll ContinueWhenAll Methode aufrufen.
Die statische Task<TResult>.Factory Eigenschaft gibt ein Standardobjekt TaskFactory<TResult> zurück. Sie können auch einen der TaskFactory<TResult> Klassenkonstruktoren aufrufen, um die Objekte zu konfigurieren, die die Task<TResult> TaskFactory<TResult> Klasse erstellt. Im folgenden Beispiel wird ein neues TaskFactory<TResult> Objekt zum Erstellen von Aufgaben konfiguriert, die über ein angegebenes Abbruchtoken, Aufgabenerstellungsoptionen, Fortsetzungsoptionen und einen angepassten Aufgabenplaner verfügen.
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
In den meisten Fällen müssen Sie keine neue TaskFactory<TResult> Instanz instanziieren. Stattdessen können Sie die statische Task<TResult>.Factory Eigenschaft verwenden, die ein Factoryobjekt zurückgibt, das Standardwerte verwendet. Anschließend können Sie die Methoden aufrufen, um neue Aufgaben zu starten oder Vorgangskontinuitäten zu definieren. Eine Abbildung finden Sie im Beispiel.
Konstruktoren
TaskFactory<TResult>() |
Initialisiert eine TaskFactory<TResult>-Instanz mit der Standardkonfiguration. |
TaskFactory<TResult>(CancellationToken) |
Initialisiert eine TaskFactory<TResult>-Instanz mit der Standardkonfiguration. |
TaskFactory<TResult>(CancellationToken, TaskCreationOptions, TaskContinuationOptions, TaskScheduler) |
Initialisiert eine TaskFactory<TResult>-Instanz mit der angegebenen Konfiguration. |
TaskFactory<TResult>(TaskCreationOptions, TaskContinuationOptions) |
Initialisiert eine TaskFactory<TResult>-Instanz mit der angegebenen Konfiguration. |
TaskFactory<TResult>(TaskScheduler) |
Initialisiert eine TaskFactory<TResult>-Instanz mit der angegebenen Konfiguration. |
Eigenschaften
CancellationToken |
Ruft das Standardabbruchtoken für diese Aufgabenfactory ab. |
ContinuationOptions |
Ruft den TaskContinuationOptions-Enumerationswert für diese Aufgabenfactory ab. |
CreationOptions |
Ruft den TaskCreationOptions-Enumerationswert für diese Aufgabenfactory ab. |
Scheduler |
Ruft das Aufgabenplaner für diese Aufgabenfactory ab. |
Methoden
ContinueWhenAll(Task[], Func<Task[],TResult>) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss eines Satzes angegebener Aufgaben gestartet wird. |
ContinueWhenAll(Task[], Func<Task[],TResult>, CancellationToken) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss eines Satzes angegebener Aufgaben gestartet wird. |
ContinueWhenAll(Task[], Func<Task[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss eines Satzes angegebener Aufgaben gestartet wird. |
ContinueWhenAll(Task[], Func<Task[],TResult>, TaskContinuationOptions) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss eines Satzes angegebener Aufgaben gestartet wird. |
ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss eines Satzes angegebener Aufgaben gestartet wird. |
ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss eines Satzes angegebener Aufgaben gestartet wird. |
ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss eines Satzes angegebener Aufgaben gestartet wird. |
ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, TaskContinuationOptions) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss eines Satzes angegebener Aufgaben gestartet wird. |
ContinueWhenAny(Task[], Func<Task,TResult>) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss einer Aufgabe im bereitgestellten Satz gestartet wird. |
ContinueWhenAny(Task[], Func<Task,TResult>, CancellationToken) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss einer Aufgabe im bereitgestellten Satz gestartet wird. |
ContinueWhenAny(Task[], Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss einer Aufgabe im bereitgestellten Satz gestartet wird. |
ContinueWhenAny(Task[], Func<Task,TResult>, TaskContinuationOptions) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss einer Aufgabe im bereitgestellten Satz gestartet wird. |
ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss einer Aufgabe im bereitgestellten Satz gestartet wird. |
ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss einer Aufgabe im bereitgestellten Satz gestartet wird. |
ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss einer Aufgabe im bereitgestellten Satz gestartet wird. |
ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, TaskContinuationOptions) |
Erstellt eine Fortsetzungsaufgabe, die nach dem Abschluss einer Aufgabe im bereitgestellten Satz gestartet wird. |
Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object) |
Erstellt eine Aufgabe, die ein dem asynchronen Programmiermodellmuster entsprechendes Paar von Begin- und End-Methoden darstellt. |
FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object, TaskCreationOptions) |
Erstellt eine Aufgabe, die ein dem asynchronen Programmiermodellmuster entsprechendes Paar von Begin- und End-Methoden darstellt. |
FromAsync(IAsyncResult, Func<IAsyncResult,TResult>) |
Erstellt eine Aufgabe, die eine EndMethod-Funktion ausführt, wenn ein angegebenes IAsyncResult abgeschlossen wird. |
FromAsync(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions) |
Erstellt eine Aufgabe, die eine EndMethod-Funktion ausführt, wenn ein angegebenes IAsyncResult abgeschlossen wird. |
FromAsync(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions, TaskScheduler) |
Erstellt eine Aufgabe, die eine EndMethod-Funktion ausführt, wenn ein angegebenes IAsyncResult abgeschlossen wird. |
FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object) |
Erstellt eine Aufgabe, die ein dem asynchronen Programmiermodellmuster entsprechendes Paar von Begin- und End-Methoden darstellt. |
FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object, TaskCreationOptions) |
Erstellt eine Aufgabe, die ein dem asynchronen Programmiermodellmuster entsprechendes Paar von Begin- und End-Methoden darstellt. |
FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object) |
Erstellt eine Aufgabe, die ein dem asynchronen Programmiermodellmuster entsprechendes Paar von Begin- und End-Methoden darstellt. |
FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object, TaskCreationOptions) |
Erstellt eine Aufgabe, die ein dem asynchronen Programmiermodellmuster entsprechendes Paar von Begin- und End-Methoden darstellt. |
FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object) |
Erstellt eine Aufgabe, die ein dem asynchronen Programmiermodellmuster entsprechendes Paar von Begin- und End-Methoden darstellt. |
FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object, TaskCreationOptions) |
Erstellt eine Aufgabe, die ein dem asynchronen Programmiermodellmuster entsprechendes Paar von Begin- und End-Methoden darstellt. |
GetHashCode() |
Fungiert als Standardhashfunktion. (Geerbt von Object) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
StartNew(Func<Object,TResult>, Object) |
Erstellt und startet eine Aufgabe. |
StartNew(Func<Object,TResult>, Object, CancellationToken) |
Erstellt und startet eine Aufgabe. |
StartNew(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions, TaskScheduler) |
Erstellt und startet eine Aufgabe. |
StartNew(Func<Object,TResult>, Object, TaskCreationOptions) |
Erstellt und startet eine Aufgabe. |
StartNew(Func<TResult>) |
Erstellt und startet eine Aufgabe. |
StartNew(Func<TResult>, CancellationToken) |
Erstellt und startet eine Aufgabe. |
StartNew(Func<TResult>, CancellationToken, TaskCreationOptions, TaskScheduler) |
Erstellt und startet eine Aufgabe. |
StartNew(Func<TResult>, TaskCreationOptions) |
Erstellt und startet eine Aufgabe. |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
Gilt für
Threadsicherheit
Alle öffentlichen und geschützten Elemente TaskFactory<TResult> sind threadsicher und können gleichzeitig von mehreren Threads verwendet werden.