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:

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() {/*...*/ }
}

Siehe auch

Konzepte

Parallele Programmierung in .NET Framework