Share via


Fábricas de tarefa

Uma fábrica de tarefa é representada pela System.Threading.Tasks.TaskFactory classe, que cria Task objetos, ou o System.Threading.Tasks.TaskFactory<TResult> classe, que cria Task<TResult> objetos. Ambas as classes que contêm métodos que você pode usar para:

O Task classe tem uma propriedade estática que representa o padrão TaskFactory. Normalmente, TaskFactory métodos são invocados usando o Factory a propriedade, conforme mostrado no exemplo a seguir.

[Visual Basic]

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

[C#]

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

Na maioria dos cenários, você não tem que derivar uma nova classe de TaskFactory. No entanto, às vezes é útil configurar uma nova TaskFactory e usá-lo para especificar determinadas opções ou associar tarefas com um Agendador personalizado. O exemplo a seguir mostra como configurar uma nova TaskFactory que cria tarefas todos usam especificado TaskScheduler e tenha especificado TaskCreationOptions Opções.

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

Consulte também

Conceitos

Programação em paralela a.NET Framework