Sdílet prostřednictvím


Továrny úloh

Továrna úloh je reprezentována System.Threading.Tasks.TaskFactory třídou, která vytváří Task objekty, nebo System.Threading.Tasks.TaskFactory<TResult> třídou, která vytváří Task<TResult> objekty. Obě třídy obsahují metody, které mohou být použity pro:

Třída Task obsahuje statickou vlastnost, která představuje ve výchozím nastavení TaskFactory. Obvykle jsou metody TaskFactory vyvolány pomocí Factory vlastnosti, jak je znázorněno v následujícím příkladu.

Visual Basic

Dim taskA as Task = Task.Factory.StartNew(Sub( ...))

[C#]

Task taskA = Task.Factory.StartNew( () => ...);

Ve většině případů není nutné odvozovat novou třídu z TaskFactory. Je však někdy užitečné nakonfigurovat nový TaskFactory a použít jej k zadání určité možnosti nebo k přidružení úlohy s vlastním plánovačem. Následující příklad ukazuje, jak nakonfigurovat novou TaskFactory , která vyváří úlohy, které všechny používají daný TaskScheduler a mají daný parametr TaskCreationOptions.

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

Viz také

Koncepty

Paralelní programování v rozhraní .NET Framework