Aufgabenfactorys
Eine Aufgabenfactory wird durch die System.Threading.Tasks.TaskFactory-Klasse dargestellt, die Task-Objekte erstellt, oder die System.Threading.Tasks.TaskFactory<TResult>-Klasse, die Task<TResult>-Objekte erstellt. Beide Klassen enthalten Methoden, die für folgende Zwecke verwendet werden können:
Erstellen von Aufgaben und umgehender Beginn der Ausführung Weitere Informationen finden Sie unter Aufgabenparallelität (Task Parallel Library).
Erstellen von Aufgabenfortsetzungen, die gestartet werden, wenn ein beliebiger Teil eines Aufgabenarrays oder das gesamte Array abgeschlossen wurden Weitere Informationen finden Sie unter Fortsetzungsaufgaben.
Erstellen von Aufgaben, die Begin/End-Methodenpaare darstellen, die sich am asynchronen Programmiermodell orientieren. Weitere Informationen finden Sie unter TPL und herkömmliche asynchrone .NET-Programmierung.
Die Task-Klasse verfügt über eine statische Eigenschaft, die das standardmäßige TaskFactory-Objekt darstellt. In der Regel werden TaskFactory-Methoden mit der Factory-Eigenschaft aufgerufen, wie im folgenden Beispiel gezeigt.
[Visual Basic]
Dim taskA as Task = Task.Factory.StartNew(Sub( ...))
[C#]
Task taskA = Task.Factory.StartNew( () => ...);
In den meisten Szenarien müssen Sie keine neue Klasse von TaskFactory ableiten. Es ist manchmal jedoch hilfreich, ein neues TaskFactory-Objekt zu konfigurieren und damit bestimmte Optionen anzugeben oder Aufgaben einem benutzerdefinierten Planer zuzuordnen. Im folgenden Beispiel wird gezeigt, wie ein neues TaskFactory-Objekt konfiguriert wird, mit dem Aufgaben erstellt werden, für die jeweils das angegebene TaskScheduler-Objekt verwendet wird und die über die angegebenen TaskCreationOptions-Optionen verfügen.
Class Program
Shared Sub Main()
Dim cts As CancellationTokenSource = New CancellationTokenSource()
Dim _factory As TaskFactory = New TaskFactory(
cts.Token,
TaskCreationOptions.PreferFairness,
TaskContinuationOptions.ExecuteSynchronously,
New MyScheduler())
Dim t2 = _factory.StartNew(Sub() DoWork())
End Sub
Shared Sub DoWork()
' ...
End Sub
class Program
{
static CancellationTokenSource cts = new CancellationTokenSource();
private static TaskFactory _factory = new TaskFactory(
cts.Token,
TaskCreationOptions.PreferFairness,
TaskContinuationOptions.ExecuteSynchronously,
new MyScheduler());
static void Main(string[] args)
{
var t2 = _factory.StartNew(() => DoWork());
}
static void DoWork() {/*...*/ }
}