Compartilhar via


TaskFactory Classe

Definição

Fornece suporte para criação e agendamento de objetos Task.

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 preenche 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 requer argumentos não padrão.

    Aviso

    Começando com .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

    Começando com .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 tiver sido concluída chamando o ContinueWhenAny método.

  • Crie uma tarefa que comece quando todas as tarefas em uma matriz tiverem sido 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 criar uma instância nova TaskFactory . 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

TaskFactory()

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

TaskFactory(CancellationToken)

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

TaskFactory(CancellationToken, TaskCreationOptions, TaskContinuationOptions, TaskScheduler)

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

TaskFactory(TaskCreationOptions, TaskContinuationOptions)

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

TaskFactory(TaskScheduler)

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

Propriedades

CancellationToken

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

ContinuationOptions

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

CreationOptions

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

Scheduler

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

Métodos

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

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

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

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

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

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

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

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas foi 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 foi 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 foi 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 foi 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 foi concluído.

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

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas foi 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 foi 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 foi 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 foi concluído.

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

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

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

Cria uma tarefa de continuação que começa quando um conjunto de tarefas especificadas foi 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 foi concluído.

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

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

ContinueWhenAny(Task[], Action<Task>)

Cria um Task de continuação que será iniciado mediante a conclusão de qualquer Tarefa no conjunto fornecido.

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

Cria um Task de continuação que será iniciado mediante a conclusão de qualquer Tarefa no conjunto fornecido.

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

Cria um Task de continuação que será iniciado mediante a conclusão de qualquer Tarefa no conjunto fornecido.

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

Cria um Task de continuação que será iniciado mediante a conclusão de qualquer Tarefa no conjunto fornecido.

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

Cria um Task<TResult> de continuação que será iniciado mediante a conclusão de qualquer Tarefa no conjunto fornecido.

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

Cria um Task<TResult> de continuação que será iniciado mediante a conclusão de qualquer Tarefa no conjunto fornecido.

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

Cria um Task<TResult> de continuação que será iniciado mediante a conclusão de qualquer Tarefa no conjunto fornecido.

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

Cria um Task<TResult> de continuação que será iniciado mediante a conclusão de qualquer Tarefa no conjunto fornecido.

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

Cria um Task de continuação que será iniciado mediante a conclusão de qualquer Tarefa no conjunto fornecido.

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

Cria um Task de continuação que será iniciado mediante a conclusão de qualquer Tarefa no conjunto fornecido.

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

Cria um Task de continuação que será iniciado mediante a conclusão de qualquer Tarefa no conjunto fornecido.

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

Cria um Task de continuação que será iniciado mediante a conclusão de qualquer Tarefa no conjunto fornecido.

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

Cria um Task<TResult> de continuação que será iniciado mediante a conclusão de qualquer Tarefa no conjunto fornecido.

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

Cria um Task<TResult> de continuação que será iniciado mediante a conclusão de qualquer Tarefa no conjunto fornecido.

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

Cria um Task<TResult> de continuação que será iniciado mediante a conclusão de qualquer Tarefa no conjunto fornecido.

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

Cria um Task<TResult> de continuação que será iniciado mediante 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)

Cria um Task que representa um par de métodos begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

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

Cria um Task que representa um par de métodos begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

FromAsync(IAsyncResult, Action<IAsyncResult>)

Cria um Task que executa uma ação do método de encerramento quando um IAsyncResult especificado é concluído.

FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions)

Cria um Task que executa uma ação do método de encerramento quando um IAsyncResult especificado é concluído.

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

Cria um Task que executa uma ação do método de encerramento quando um IAsyncResult especificado é concluído.

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 begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

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 begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

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 begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

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 begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

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 begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

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 begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

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

Cria um Task que representa um par de métodos begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

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 begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

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

Cria um Task<TResult> que representa um par de métodos begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

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 begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

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

Cria um Task que representa um par de métodos begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

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

Cria um Task que representa um par de métodos begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

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

Cria um Task<TResult> que representa um par de métodos begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

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

Cria um Task<TResult> que representa um par de métodos begin e end que estão em conformidade com o padrão do Modelo de Programação Assíncrona.

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

Cria uma Task<TResult> que executa uma função do método de encerramento quando um IAsyncResult especificado é concluído.

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

Cria uma Task<TResult> que executa uma função do método de encerramento quando um IAsyncResult especificado é concluído.

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

Cria uma Task<TResult> que executa uma função do método de encerramento quando um IAsyncResult especificado é concluído.

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 Object atual.

(Herdado de Object)
StartNew(Action)

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

StartNew(Action, CancellationToken)

Cria e inicia uma tarefa para o delegado de ação e o token de cancelamento especificados.

StartNew(Action, CancellationToken, TaskCreationOptions, TaskScheduler)

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

StartNew(Action, TaskCreationOptions)

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

StartNew(Action<Object>, Object)

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

StartNew(Action<Object>, Object, CancellationToken)

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

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, TaskCreationOptions)

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

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

Cria e inicia uma tarefa do tipo TResult para o delegado de função e o estado 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, CancellationToken, TaskCreationOptions, TaskScheduler)

Cria e inicia uma tarefa do 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, TaskCreationOptions)

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

StartNew<TResult>(Func<TResult>)

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

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

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

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

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

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

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

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