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 Task<TResult> von 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 auszuführen. Die erste Aufgabe gibt ein Zeichenfolgenarray zurück, das mit den Namen der Dateien im MyDocuments-Verzeichnis des Benutzers aufgefüllt wird, während die zweite ein Zeichenfolgenarray zurückgibt, das mit den Namen der Unterverzeichnisse des MyDocuments-Verzeichnisses des Benutzers aufgefüllt wird. Anschließend wird die TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) Methode aufgerufen, die Informationen über die Anzahl der Dateien und Verzeichnisse in den Arrays anzeigt, die von den beiden Aufgaben zurückgegeben werden, 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 Vorgängen:
Die TaskFactory Klasse, die erstellt und Objekte erstellt Task und Task<TResult> objekte.
Die TaskFactory<TResult> Klasse, die Objekte erstellt Task<TResult> .
Die TaskFactory<TResult> Klasse ermöglicht Folgendes:
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 keine Standardargumente 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 wurde, indem Sie die ContinueWhenAny Methode aufrufen ContinueWhenAny .
Erstellen Sie eine Aufgabe, die beginnt, wenn alle Aufgaben in einem Array abgeschlossen wurden, indem Sie die ContinueWhenAll Oder-Methode ContinueWhenAll 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 Task<TResult> von der TaskFactory<TResult> Klasse erstellten Objekte zu konfigurieren. Im folgenden Beispiel wird ein neues TaskFactory<TResult> Objekt konfiguriert, um Aufgaben zu erstellen, die über ein bestimmtes 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 zugehörigen Methoden aufrufen, um neue Aufgaben zu starten oder Aufgabenfortsetzungen zu definieren. Eine Abbildung finden Sie im Beispiel.
Konstruktoren
| Name | Beschreibung |
|---|---|
| TaskFactory<TResult>() |
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>(CancellationToken) |
Initialisiert eine TaskFactory<TResult> Instanz mit der Standardkonfiguration. |
| 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
| Name | Beschreibung |
|---|---|
| CancellationToken |
Ruft das Standardmäßige Abbruchtoken für diese Vorgangsfactory ab. |
| ContinuationOptions |
Ruft den TaskContinuationOptions Enumerationswert für diese Vorgangsfactory ab. |
| CreationOptions |
Ruft den TaskCreationOptions Enumerationswert für diese Vorgangsfactory ab. |
| Scheduler |
Ruft den Aufgabenplaner für diese Vorgangsfactory ab. |
Methoden
| Name | Beschreibung |
|---|---|
| ContinueWhenAll(Task[], Func<Task[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Erstellt eine Fortsetzungsaufgabe, die nach Abschluss einer Reihe von bereitgestellten Aufgaben gestartet wird. |
| ContinueWhenAll(Task[], Func<Task[],TResult>, CancellationToken) |
Erstellt eine Fortsetzungsaufgabe, die nach Abschluss einer Reihe von bereitgestellten Vorgängen gestartet wird. |
| ContinueWhenAll(Task[], Func<Task[],TResult>, TaskContinuationOptions) |
Erstellt eine Fortsetzungsaufgabe, die nach Abschluss einer Reihe von bereitgestellten Aufgaben gestartet wird. |
| ContinueWhenAll(Task[], Func<Task[],TResult>) |
Erstellt eine Fortsetzungsaufgabe, die nach Abschluss einer Reihe von bereitgestellten Vorgängen gestartet wird. |
| ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Erstellt eine Fortsetzungsaufgabe, die nach Abschluss einer Reihe von bereitgestellten Vorgängen gestartet wird. |
| ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken) |
Erstellt eine Fortsetzungsaufgabe, die nach Abschluss einer Reihe von bereitgestellten Vorgängen gestartet wird. |
| ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, TaskContinuationOptions) |
Erstellt eine Fortsetzungsaufgabe, die nach Abschluss einer Reihe von bereitgestellten Vorgängen gestartet wird. |
| ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>) |
Erstellt eine Fortsetzungsaufgabe, die nach Abschluss einer Reihe von bereitgestellten Vorgängen gestartet wird. |
| ContinueWhenAny(Task[], Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Erstellt eine Fortsetzungsaufgabe, die beim Abschluss eines Vorgangs im angegebenen Satz gestartet wird. |
| ContinueWhenAny(Task[], Func<Task,TResult>, CancellationToken) |
Erstellt eine Fortsetzungsaufgabe, die beim Abschluss eines Vorgangs im angegebenen Satz gestartet wird. |
| ContinueWhenAny(Task[], Func<Task,TResult>, TaskContinuationOptions) |
Erstellt eine Fortsetzungsaufgabe, die beim Abschluss eines Vorgangs im angegebenen Satz gestartet wird. |
| ContinueWhenAny(Task[], Func<Task,TResult>) |
Erstellt eine Fortsetzungsaufgabe, die beim Abschluss eines Vorgangs im angegebenen Satz gestartet wird. |
| ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Erstellt eine Fortsetzungsaufgabe, die beim Abschluss eines Vorgangs im angegebenen Satz gestartet wird. |
| ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken) |
Erstellt eine Fortsetzungsaufgabe, die beim Abschluss eines Vorgangs im angegebenen Satz gestartet wird. |
| ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, TaskContinuationOptions) |
Erstellt eine Fortsetzungsaufgabe, die beim Abschluss eines Vorgangs im angegebenen Satz gestartet wird. |
| ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>) |
Erstellt eine Fortsetzungsaufgabe, die beim Abschluss eines Vorgangs im angegebenen Satz gestartet wird. |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object, TaskCreationOptions) |
Erstellt eine Aufgabe, die ein Start- und Endmethodenpaar darstellt, das dem Muster des asynchronen Programmiermodells entspricht. |
| FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object) |
Erstellt eine Aufgabe, die ein Start- und Endmethodenpaar darstellt, das dem Muster des asynchronen Programmiermodells entspricht. |
| FromAsync(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions, TaskScheduler) |
Erstellt eine Aufgabe, die eine Endmethodenfunktion ausführt, wenn ein angegebener IAsyncResult Vorgang abgeschlossen ist. |
| FromAsync(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions) |
Erstellt eine Aufgabe, die eine Endmethodenfunktion ausführt, wenn ein angegebener IAsyncResult Vorgang abgeschlossen ist. |
| FromAsync(IAsyncResult, Func<IAsyncResult,TResult>) |
Erstellt eine Aufgabe, die eine Endmethodenfunktion ausführt, wenn ein angegebener IAsyncResult Vorgang abgeschlossen ist. |
| FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object, TaskCreationOptions) |
Erstellt eine Aufgabe, die ein Start- und Endmethodenpaar darstellt, das dem Muster des asynchronen Programmiermodells entspricht. |
| FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object) |
Erstellt eine Aufgabe, die ein Start- und Endmethodenpaar darstellt, das dem Muster des asynchronen Programmiermodells entspricht. |
| FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object, TaskCreationOptions) |
Erstellt eine Aufgabe, die ein Start- und Endmethodenpaar darstellt, das dem Muster des asynchronen Programmiermodells entspricht. |
| FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object) |
Erstellt eine Aufgabe, die ein Start- und Endmethodenpaar darstellt, das dem Muster des asynchronen Programmiermodells entspricht. |
| FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object, TaskCreationOptions) |
Erstellt eine Aufgabe, die ein Start- und Endmethodenpaar darstellt, das dem Muster des asynchronen Programmiermodells entspricht. |
| FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object) |
Erstellt eine Aufgabe, die ein Start- und Endmethodenpaar darstellt, das dem Muster des asynchronen Programmiermodells entspricht. |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| StartNew(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions, TaskScheduler) |
Erstellt und startet eine Aufgabe. |
| StartNew(Func<Object,TResult>, Object, CancellationToken) |
Erstellt und startet eine Aufgabe. |
| StartNew(Func<Object,TResult>, Object, TaskCreationOptions) |
Erstellt und startet eine Aufgabe. |
| StartNew(Func<Object,TResult>, Object) |
Erstellt und startet eine Aufgabe. |
| StartNew(Func<TResult>, CancellationToken, TaskCreationOptions, TaskScheduler) |
Erstellt und startet eine Aufgabe. |
| StartNew(Func<TResult>, CancellationToken) |
Erstellt und startet eine Aufgabe. |
| StartNew(Func<TResult>, TaskCreationOptions) |
Erstellt und startet eine Aufgabe. |
| StartNew(Func<TResult>) |
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 Member von TaskFactory<TResult> sind threadsicher und können gleichzeitig aus mehreren Threads verwendet werden.