TaskFactory<TResult> Classe

Definição

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

generic <typename TResult>
public ref class TaskFactory
public class TaskFactory<TResult>
type TaskFactory<'Result> = class
Public Class TaskFactory(Of TResult)

Parâmetros de Tipo Genérico

TResult

O valor de retorno dos Task<TResult> objetos que os métodos desta classe criam.

Herança
TaskFactory<TResult>

Exemplos

O exemplo seguinte usa a propriedade estática Factory para fazer duas chamadas ao TaskFactory<TResult>.StartNew método. A primeira tarefa devolve um array de cadeias que é preenchido com os nomes dos ficheiros no diretório MyDocuments do utilizador, enquanto a segunda devolve um array de strings preenchido com os nomes dos subdiretórios do diretório MyDocuments do utilizador. Depois chama o TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) método, que apresenta informação sobre o número de ficheiros e diretórios nos arrays devolvidos pelas duas tarefas após a sua execução.

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

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

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

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

Observações

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

A TaskFactory<TResult> aula permite-lhe fazer o seguinte:

  • Crie uma tarefa e inicie-a imediatamente chamando o StartNew método. Pode chamar as sobrecargas deste método para criar e executar uma tarefa que exija argumentos não padrão.

    Warning

    A partir do .NET Framework 4.5, o método Task.Run fornece a forma 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 de um array for concluída, chamando o ContinueWhenAny método ou ContinueWhenAny .

  • Crie uma tarefa que comece quando todas as tarefas de um array forem concluídas, chamando o ContinueWhenAll método ou.ContinueWhenAll

A propriedade estática Task<TResult>.Factory devolve um objeto por defeito TaskFactory<TResult> . Também pode chamar um dos TaskFactory<TResult> construtores de classes para configurar os Task<TResult> objetos que a TaskFactory<TResult> classe cria. O exemplo seguinte configura um novo TaskFactory<TResult> objeto para criar tarefas que tenham 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;

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

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

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

   static int DoWork()
   {
       /*...*/
       return DateTime.Now.Hour <= 12 ?  1 : 2;
    }
}
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(Of Integer)(
                         cts.Token,
                         TaskCreationOptions.PreferFairness,
                         TaskContinuationOptions.ExecuteSynchronously,
                         New CustomScheduler())

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

   Function DoWork() As Integer
      Return If(Date.Now.Hour <= 12, 1, 2)
   End Function
End Module

Na maioria dos casos, não é necessário instanciar uma nova TaskFactory<TResult> instância. Em vez disso, pode usar a propriedade estática Task<TResult>.Factory , que devolve um objeto de fábrica que usa valores por defeito. Pode então chamar os seus métodos para iniciar novas tarefas ou definir continuações de tarefas. Para ilustração, veja o exemplo.

Construtores

Name Description
TaskFactory<TResult>()

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

TaskFactory<TResult>(CancellationToken, TaskCreationOptions, TaskContinuationOptions, TaskScheduler)

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

TaskFactory<TResult>(CancellationToken)

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

TaskFactory<TResult>(TaskCreationOptions, TaskContinuationOptions)

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

TaskFactory<TResult>(TaskScheduler)

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

Propriedades

Name Description
CancellationToken

Recebe o token de cancelamento padrão para esta fábrica de tarefas.

ContinuationOptions

Obtém o TaskContinuationOptions valor de enumeração para esta fábrica de tarefas.

CreationOptions

Obtém o TaskCreationOptions valor de enumeração para esta fábrica de tarefas.

Scheduler

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

Métodos

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

Cria uma tarefa de continuação que será iniciada após a conclusão de um conjunto de Tarefas fornecidas.

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

Cria uma tarefa de continuação que será iniciada após a conclusão de um conjunto de tarefas fornecidas.

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

Cria uma tarefa de continuação que será iniciada após a conclusão de um conjunto de Tarefas fornecidas.

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

Cria uma tarefa de continuação que será iniciada após a conclusão de um conjunto de tarefas fornecidas.

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

Cria uma tarefa de continuação que será iniciada após a conclusão de um conjunto de tarefas fornecidas.

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

Cria uma tarefa de continuação que será iniciada após a conclusão de um conjunto de tarefas fornecidas.

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

Cria uma tarefa de continuação que será iniciada após a conclusão de um conjunto de tarefas fornecidas.

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

Cria uma tarefa de continuação que será iniciada após a conclusão de um conjunto de tarefas fornecidas.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Cria uma tarefa de continuação 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>, Func<IAsyncResult,TResult>, Object, TaskCreationOptions)

Cria uma tarefa que representa um par de métodos de início e fim que seguem o padrão do Modelo de Programação Assíncrona.

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

Cria uma tarefa que representa um par de métodos de início e fim que seguem o padrão do Modelo de Programação Assíncrona.

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

Cria uma tarefa que executa uma função de fim de método quando uma especificada IAsyncResult é concluída.

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

Cria uma tarefa que executa uma função de fim de método quando uma especificada IAsyncResult é concluída.

FromAsync(IAsyncResult, Func<IAsyncResult,TResult>)

Cria uma tarefa que executa uma função de fim de método quando uma especificada IAsyncResult é concluída.

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

Cria uma tarefa que representa um par de métodos de início e fim que seguem o padrão do Modelo de Programação Assíncrona.

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

Cria uma tarefa que representa um par de métodos de início e fim que seguem o padrão do Modelo de Programação Assíncrona.

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

Cria uma tarefa que representa um par de métodos de início e fim que seguem o padrão do Modelo de Programação Assíncrona.

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

Cria uma tarefa que representa um par de métodos de início e fim que seguem o padrão do Modelo de Programação Assíncrona.

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

Cria uma tarefa que representa um par de métodos de início e fim que seguem o padrão do Modelo de Programação Assíncrona.

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

Cria uma tarefa que representa um par de métodos de início e fim que seguem o padrão do Modelo de Programação Assíncrona.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

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

Cria e inicia uma tarefa.

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

Cria e inicia uma tarefa.

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

Cria e inicia uma tarefa.

StartNew(Func<Object,TResult>, Object)

Cria e inicia uma tarefa.

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

Cria e inicia uma tarefa.

StartNew(Func<TResult>, CancellationToken)

Cria e inicia uma tarefa.

StartNew(Func<TResult>, TaskCreationOptions)

Cria e inicia uma tarefa.

StartNew(Func<TResult>)

Cria e inicia uma tarefa.

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Segurança de Thread

Todos os membros públicos e protegidos são TaskFactory<TResult> seguros para threads e podem ser usados simultaneamente a partir de múltiplos threads.

Ver também