Compartilhar via


TaskFactory Classe

Definição

Fornece suporte para criar e agendar Task objetos.

public ref class TaskFactory
public class TaskFactory
type TaskFactory = class
Public Class TaskFactory
Herança
TaskFactory

Exemplos

O exemplo a seguir usa a propriedade estática Factory para fazer duas chamadas para o TaskFactory.StartNew método. O primeiro popula uma matriz com os nomes dos arquivos no diretório MyDocuments do usuário, enquanto o segundo preenche uma matriz com os nomes de subdiretórios do diretório MyDocuments do usuário. Em seguida, ele chama o TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) método, que exibe informações sobre o número de arquivos e diretórios nas duas matrizes após a conclusão da execução das duas primeiras tarefas.

using System;
using System.IO;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      Task[] tasks = new Task[2];
      String[] files = null;
      String[] dirs = null;
      String docsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

      tasks[0] = Task.Factory.StartNew( () => files = Directory.GetFiles(docsDirectory));
      tasks[1] = Task.Factory.StartNew( () => dirs = Directory.GetDirectories(docsDirectory));

      Task.Factory.ContinueWhenAll(tasks, completedTasks => {
                                             Console.WriteLine("{0} contains: ", docsDirectory);
                                             Console.WriteLine("   {0} subdirectories", dirs.Length);
                                             Console.WriteLine("   {0} files", files.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
      Dim files() As String = Nothing
      Dim dirs() As String = Nothing
      Dim docsDirectory As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
      
      tasks(0) = Task.Factory.StartNew( Sub()
                                           files = Directory.GetFiles(docsDirectory)
                                        End Sub )
      tasks(1) = Task.Factory.StartNew( Sub()
                                           dirs = Directory.GetDirectories(docsDirectory)
                                        End Sub )
      Task.Factory.ContinueWhenAll(tasks, Sub(completedTasks)
                                             Console.WriteLine("{0} contains: ", docsDirectory)
                                             Console.WriteLine("   {0} subdirectories", dirs.Length)
                                             Console.WriteLine("   {0} files", files.Length)
                                          End Sub)
   End Sub
End Module
' The example displays output like the following:
'       C:\Users\<username>\Documents contains:
'          24 subdirectories
'          16 files

Comentários

O .NET fornece duas fábricas para criar e agendar tarefas:

  • A TaskFactory classe, que cria Task e Task<TResult> objetos. Você pode chamar as sobrecargas desse método para criar e executar uma tarefa que exige argumentos não padrão.

    Aviso

    A partir do .NET Framework 4.5, o Task.Run método fornece a maneira mais fácil de criar uma tarefa com valores de configuração padrão e iniciá-la imediatamente.

  • A TaskFactory<TResult> classe, que cria Task<TResult> objetos.

A TaskFactory classe permite que você faça o seguinte:

  • Crie uma tarefa e inicie-a imediatamente chamando o StartNew método.

    Aviso

    A partir do .NET Framework 4.5, o Task.Run método fornece a maneira mais fácil de criar uma tarefa com valores de configuração padrão e iniciá-la imediatamente.

  • Crie uma tarefa que comece quando qualquer uma das tarefas em uma matriz for concluída chamando o ContinueWhenAny método.

  • Crie uma tarefa que comece quando todas as tarefas em uma matriz forem concluídas chamando o ContinueWhenAll método.

A propriedade estática Task<TResult>.Factory retorna um objeto padrão TaskFactory<TResult> . Você também pode chamar um dos construtores de TaskFactory classe para configurar os Task objetos que a TaskFactory classe cria. O exemplo a seguir configura um novo TaskFactory objeto para criar tarefas que têm um token de cancelamento especificado, opções de criação de tarefas, opções de continuação e um agendador de tarefas personalizado.

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

class Example
{
   static CancellationTokenSource cts = new CancellationTokenSource();

   static TaskFactory factory = new TaskFactory(
      cts.Token,
      TaskCreationOptions.PreferFairness,
      TaskContinuationOptions.ExecuteSynchronously,
      new CustomScheduler());

   static void Main()
   {
      var t2 = factory.StartNew(() => DoWork());
      cts.Dispose();
   }

   static void DoWork() {/*...*/ }
}
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(cts.Token,
                                     TaskCreationOptions.PreferFairness,
                                     TaskContinuationOptions.ExecuteSynchronously,
                                     New CustomScheduler())

      Dim t2 = factory.StartNew(Sub() DoWork())
      cts.Dispose()
   End Sub

   Sub DoWork()
      ' ...
   End Sub
End Module

Na maioria dos casos, você não precisa instanciar uma nova TaskFactory instância. Em vez disso, você pode usar a Task.Factory propriedade, que retorna um objeto de fábrica que usa valores padrão. Em seguida, você pode chamar seus métodos para iniciar novas tarefas ou definir continuações de tarefa. Para obter uma ilustração, consulte o exemplo.

Construtores

Nome Description
TaskFactory()

Inicializa uma TaskFactory instância com a configuração padrão.

TaskFactory(CancellationToken, TaskCreationOptions, TaskContinuationOptions, TaskScheduler)

Inicializa uma TaskFactory instância com a configuração especificada.

TaskFactory(CancellationToken)

Inicializa uma TaskFactory instância com a configuração especificada.

TaskFactory(TaskCreationOptions, TaskContinuationOptions)

Inicializa uma TaskFactory instância com a configuração especificada.

TaskFactory(TaskScheduler)

Inicializa uma TaskFactory instância com a configuração especificada.

Propriedades

Nome Description
CancellationToken

Obtém o token de cancelamento padrão para este fábrica de tarefas.

ContinuationOptions

Obtém as opções de continuação de tarefa padrão para este fábrica de tarefas.

CreationOptions

Obtém as opções de criação de tarefas padrão para este fábrica de tarefas.

Scheduler

Obtém o agendador de tarefas padrão para este fábrica de tarefas.

Métodos

Nome Description
ContinueWhenAll(Task[], Action<Task[]>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAll(Task[], Action<Task[]>, CancellationToken)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAll(Task[], Action<Task[]>, TaskContinuationOptions)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAll(Task[], Action<Task[]>)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, TaskContinuationOptions)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAll<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, CancellationToken)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, TaskContinuationOptions)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, CancellationToken)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>, TaskContinuationOptions)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAll<TResult>(Task[], Func<Task[],TResult>)

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas é concluído.

ContinueWhenAny(Task[], Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma continuação Task que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

ContinueWhenAny(Task[], Action<Task>, CancellationToken)

Cria uma continuação Task que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

ContinueWhenAny(Task[], Action<Task>, TaskContinuationOptions)

Cria uma continuação Task que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

ContinueWhenAny(Task[], Action<Task>)

Cria uma continuação Task que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma continuação Task<TResult> que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken)

Cria uma continuação Task<TResult> que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, TaskContinuationOptions)

Cria uma continuação Task<TResult> que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

ContinueWhenAny<TAntecedentResult,TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>)

Cria uma continuação Task<TResult> que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma continuação Task que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, CancellationToken)

Cria uma continuação Task que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, TaskContinuationOptions)

Cria uma continuação Task que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>)

Cria uma continuação Task que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma continuação Task<TResult> que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, CancellationToken)

Cria uma continuação Task<TResult> que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>, TaskContinuationOptions)

Cria uma continuação Task<TResult> que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

ContinueWhenAny<TResult>(Task[], Func<Task,TResult>)

Cria uma continuação Task<TResult> que será iniciada após a conclusão de qualquer Tarefa no conjunto fornecido.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, Object, TaskCreationOptions)

Cria um Task que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, Object)

Cria um Task que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions, TaskScheduler)

Cria um Task que executa uma ação de método final quando uma especificada é IAsyncResult concluída.

FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions)

Cria um Task que executa uma ação de método final quando uma especificada é IAsyncResult concluída.

FromAsync(IAsyncResult, Action<IAsyncResult>)

Cria um Task que executa uma ação de método final quando uma especificada é IAsyncResult concluída.

FromAsync<TArg1,TArg2,TArg3,TResult>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object, TaskCreationOptions)

Cria um Task<TResult> que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync<TArg1,TArg2,TArg3,TResult>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object)

Cria um Task<TResult> que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, TArg3, Object, TaskCreationOptions)

Cria um Task que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, TArg3, Object)

Cria um Task que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync<TArg1,TArg2,TResult>(Func<TArg1,TArg2,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object, TaskCreationOptions)

Cria um Task<TResult> que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync<TArg1,TArg2,TResult>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object)

Cria um Task<TResult> que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, Object, TaskCreationOptions)

Cria um Task que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, TArg2, Object)

Cria um Task que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync<TArg1,TResult>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object, TaskCreationOptions)

Cria um Task<TResult> que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync<TArg1,TResult>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object)

Cria um Task<TResult> que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, Object, TaskCreationOptions)

Cria um Task que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Action<IAsyncResult>, TArg1, Object)

Cria um Task que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync<TResult>(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object, TaskCreationOptions)

Cria um Task<TResult> que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync<TResult>(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object)

Cria um Task<TResult> que representa um par de métodos de início e término que estão em conformidade com o padrão de Modelo de Programação Assíncrono.

FromAsync<TResult>(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions, TaskScheduler)

Cria um Task<TResult> que executa uma função de método final quando uma especificada é IAsyncResult concluída.

FromAsync<TResult>(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions)

Cria um Task<TResult> que executa uma função de método final quando uma especificada é IAsyncResult concluída.

FromAsync<TResult>(IAsyncResult, Func<IAsyncResult,TResult>)

Cria um Task<TResult> que executa uma função de método final quando uma especificada é IAsyncResult concluída.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
StartNew(Action, CancellationToken, TaskCreationOptions, TaskScheduler)

Cria e inicia uma tarefa para o delegado de ação especificado, token de cancelamento, opções de criação e estado.

StartNew(Action, CancellationToken)

Cria e inicia uma tarefa para o representante de ação especificado e o token de cancelamento.

StartNew(Action, TaskCreationOptions)

Cria e inicia uma tarefa para as opções de criação e delegado de ação especificados.

StartNew(Action)

Cria e inicia uma tarefa para o delegado de ação especificado.

StartNew(Action<Object>, Object, CancellationToken, TaskCreationOptions, TaskScheduler)

Cria e inicia uma tarefa para o delegado de ação, o estado, o token de cancelamento, as opções de criação e o agendador de tarefas especificados.

StartNew(Action<Object>, Object, CancellationToken)

Cria e inicia uma tarefa para o representante de ação, o estado e o token de cancelamento especificados.

StartNew(Action<Object>, Object, TaskCreationOptions)

Cria e inicia uma tarefa para o delegado de ação, o estado e as opções de criação especificados.

StartNew(Action<Object>, Object)

Cria e inicia uma tarefa para o delegado e o estado da ação especificados.

StartNew<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions, TaskScheduler)

Cria e inicia uma tarefa de tipo TResult para o delegado de função, o estado, o token de cancelamento, as opções de criação e o agendador de tarefas especificados.

StartNew<TResult>(Func<Object,TResult>, Object, CancellationToken)

Cria e inicia uma tarefa do tipo TResult para o delegado de função, o estado e o token de cancelamento especificados.

StartNew<TResult>(Func<Object,TResult>, Object, TaskCreationOptions)

Cria e inicia uma tarefa de tipo TResult para as opções de delegação, estado e criação de função especificadas.

StartNew<TResult>(Func<Object,TResult>, Object)

Cria e inicia uma tarefa do tipo TResult para o delegado e o estado da função especificados.

StartNew<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions, TaskScheduler)

Cria e inicia uma tarefa de tipo TResult para o delegado de função especificado, token de cancelamento, opções de criação e agendador de tarefas.

StartNew<TResult>(Func<TResult>, CancellationToken)

Cria e inicia uma tarefa de tipo TResult para o representante de função especificado e o token de cancelamento.

StartNew<TResult>(Func<TResult>, TaskCreationOptions)

Cria e inicia uma tarefa de tipo TResult para as opções de criação e delegado de função especificados.

StartNew<TResult>(Func<TResult>)

Cria e inicia uma tarefa de tipo TResult para o delegado de função especificado.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Acesso thread-safe

Todos os membros públicos e protegidos TaskFactory são thread-safe e podem ser usados simultaneamente de vários threads.

Confira também