Task<TResult> Classe

Definição

Representa uma operação assíncrona que pode devolver um valor.

generic <typename TResult>
public ref class Task : System::Threading::Tasks::Task
public class Task<TResult> : System.Threading.Tasks.Task
type Task<'Result> = class
    inherit Task
Public Class Task(Of TResult)
Inherits Task

Parâmetros de Tipo Genérico

TResult

O tipo do resultado produzido por este Task<TResult>.

Herança
Task<TResult>

Observações

A Task<TResult> classe representa uma única operação que devolve um valor e que normalmente é executada de forma assíncrona. Task<TResult> objetos são um dos componentes centrais do padrão assíncrono baseado em tarefas introduzido pela primeira vez no .NET Framework 4. Como o trabalho executado por um Task<TResult> objeto normalmente é executado assincronamente numa thread do pool de threads em vez de sincronamente na thread principal da aplicação, é possível usar a propriedade Status, bem como as propriedades IsCanceled, IsCompleted e IsFaulted para determinar o estado de uma tarefa. Mais comumente, uma expressão lambda é usada para especificar o trabalho que a tarefa deve executar.

Task<TResult> As instâncias podem ser criadas de várias formas. A abordagem mais comum, disponível a partir de .NET Framework 4.5, é chamar o método estático Task.Run<TResult>(Func<TResult>) ou Task.Run<TResult>(Func<TResult>, CancellationToken). Estes métodos fornecem uma forma simples de iniciar uma tarefa usando valores predefinidos e sem adquirir parâmetros adicionais. O exemplo a seguir usa o Task.Run<TResult>(Func<TResult>) método para iniciar uma tarefa que faz loops e, em seguida, exibe o número de iterações de loop:

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task<int>.Run( () => {
                                      // Just loop.
                                      int max = 1000000;
                                      int ctr = 0;
                                      for (ctr = 0; ctr <= max; ctr++) {
                                         if (ctr == max / 2 && DateTime.Now.Hour <= 12) {
                                            ctr++;
                                            break;
                                         }
                                      }
                                      return ctr;
                                    } );
      Console.WriteLine("Finished {0:N0} iterations.", t.Result);
   }
}
// The example displays output like the following:
//        Finished 1,000,001 loop iterations.
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim t As Task(Of Integer) = Task.Run(Function()
                                  Dim max As Integer = 1000000
                                  Dim ctr As Integer
                                  For ctr = 0 to max
                                     If ctr = max \ 2 And Date.Now.Hour <= 12 Then
                                        ctr += 1
                                        Exit For
                                     End If
                                  Next
                                  Return ctr
                               End Function)
      Console.WriteLine("Finished {0:N0} iterations.", t.Result)
   End Sub
End Module
' The example displays the following output:
'       Finished 1,000,001 loop iterations

Uma alternativa, e a forma mais comum de iniciar uma tarefa no .NET Framework 4, é chamar o método estático TaskFactory.StartNew ou TaskFactory<TResult>.StartNew. A Task.Factory propriedade devolve um TaskFactory objeto, e a Task<TResult>.Factory propriedade devolve um TaskFactory<TResult> objeto. As sobrecargas do método StartNew permitem passar argumentos, definir opções de criação de tarefas e especificar um agendador de tarefas. O exemplo a seguir usa o TaskFactory<TResult>.StartNew(Func<TResult>) método para iniciar uma tarefa. É funcionalmente equivalente ao código no exemplo anterior.

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task<int>.Factory.StartNew( () => {
                                      // Just loop.
                                      int max = 1000000;
                                      int ctr = 0;
                                      for (ctr = 0; ctr <= max; ctr++) {
                                         if (ctr == max / 2 && DateTime.Now.Hour <= 12) {
                                            ctr++;
                                            break;
                                         }
                                      }
                                      return ctr;
                               } );
      Console.WriteLine("Finished {0:N0} iterations.", t.Result);
   }
}
// The example displays the following output:
//        Finished 1000001 loop iterations
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim t = Task(Of Integer).Factory.StartNew(Function()
                                  Dim max As Integer = 1000000
                                  Dim ctr As Integer
                                  For ctr = 0 to max
                                     If ctr = max \ 2 And Date.Now.Hour <= 12 Then
                                       ctr += 1
                                       Exit For
                                     End If
                                  Next
                                  Return ctr
                               End Function)
      Console.WriteLine("Finished {0:N0} iterations.", t.Result)
   End Sub
End Module
' The example displays output like the following:
'       Finished 1,000,001 iterations

Para obter exemplos mais completos, consulte Programação assíncrona baseada em tarefas.

A Task<TResult> classe também fornece construtores que inicializam a tarefa, mas que não a agendam para execução. Por razões de desempenho, os Task.Run métodos e Task.Factory.StartNew são os mecanismos preferidos para criar e agendar tarefas computacionais, mas para cenários em que a criação e o agendamento de tarefas devem ser separados, os construtores podem ser usados, e o método da Start tarefa pode então ser usado para agendar a tarefa para execução numa altura posterior.

Começando com aplicações de desktop que têm como alvo o .NET Framework 4.6, a cultura do thread que cria e invoca uma tarefa torna-se parte integrante do contexto do thread. Ou seja, independentemente da cultura atual do thread no qual a tarefa é executada, a cultura atual da tarefa é a cultura do thread chamador. Para aplicativos destinados a versões do .NET Framework anteriores ao .NET Framework 4.6, a cultura da tarefa é a cultura do thread no qual a tarefa é executada. Para obter mais informações, consulte a seção "Cultura e operações assíncronas baseadas em tarefas" no CultureInfo tópico . Note que as aplicações da Store seguem o Windows Runtime na definição e obtenção da cultura padrão.

Para operações que não devolvem um valor, utiliza-se a Task classe. Começando com C# 7.0, para uma tarefa mais leve que seja um tipo de valor em vez de um tipo de referência, use a System.Threading.Tasks.ValueTask<TResult> estrutura.

Construtores

Name Description
Task<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions)

Inicializa um novo Task<TResult> com a ação, estado e opções especificados.

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

Inicializa um novo Task<TResult> com a ação, estado e opções especificados.

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

Inicializa um novo Task<TResult> com a ação, estado e opções especificados.

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

Inicializa um novo Task<TResult> com a função e o estado especificados.

Task<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions)

Inicializa um novo Task<TResult> com as funções e opções de criação especificadas.

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

Inicializa um novo Task<TResult> com a função especificada.

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

Inicializa um novo Task<TResult> com as funções e opções de criação especificadas.

Task<TResult>(Func<TResult>)

Inicializa um novo Task<TResult> com a função especificada.

Propriedades

Name Description
AsyncState

Recebe o objeto de estado fornecido quando foi criado Task , ou nulo se não tiver sido fornecido.

(Herdado de Task)
CreationOptions

É o TaskCreationOptions que se usa para criar esta tarefa.

(Herdado de Task)
Exception

Obtém o AggregateException que causou o Task fim prematuro. Se o Task completar com sucesso ou ainda não tiver lançado exceções, isto devolverá null.

(Herdado de Task)
Factory

Obtém um método de fábrica para criar e configurar Task<TResult> instâncias.

Id

Obtém um ID para este Task caso.

(Herdado de Task)
IsCanceled

Percebe se esta Task instância concluiu a execução devido ao cancelamento.

(Herdado de Task)
IsCompleted

Recebe um valor que indica se a tarefa foi concluída.

(Herdado de Task)
IsCompletedSuccessfully

Percebe se a tarefa foi concluída.

(Herdado de Task)
IsFaulted

Obtém se o Task concluído devido a uma exceção não tratada.

(Herdado de Task)
Result

Obtém o valor de resultado deste Task<TResult>.

Status

Percebe TaskStatus esta tarefa.

(Herdado de Task)

Métodos

Name Description
ConfigureAwait(Boolean)

Configura um awaiter usado para aguardar isto Task<TResult>.

ContinueWith(Action<Task,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma continuação que recebe informação de estado fornecida pelo chamador e um token de cancelamento, que é executada quando o destino Task é concluído. A continuação é executada com base num conjunto de condições especificadas e utiliza um agendador especificado.

(Herdado de Task)
ContinueWith(Action<Task,Object>, Object, CancellationToken)

Cria uma continuação que recebe informação de estado fornecida pelo chamador e um token de cancelamento, e que é executada de forma assíncrona quando o destino Task termina.

(Herdado de Task)
ContinueWith(Action<Task,Object>, Object, TaskContinuationOptions)

Cria uma continuação que recebe informações de estado fornecidas pelo chamador e executa-se quando o destino Task termina. A continuação é executada com base num conjunto de condições especificadas.

(Herdado de Task)
ContinueWith(Action<Task,Object>, Object, TaskScheduler)

Cria uma continuação que recebe informação de estado fornecida pelo chamador e executa assíncrona quando o destino Task termina. A continuação utiliza um escalonador especificado.

(Herdado de Task)
ContinueWith(Action<Task,Object>, Object)

Cria uma continuação que recebe informações de estado fornecidas pelo chamador e executa-se quando o destino Task termina.

(Herdado de Task)
ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma continuação que é executada quando o alvo Task<TResult> é concluído.

ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken)

Cria uma continuação que é executada quando o alvo Task<TResult> é concluído.

ContinueWith(Action<Task<TResult>,Object>, Object, TaskContinuationOptions)

Cria uma continuação que é executada quando o alvo Task<TResult> é concluído.

ContinueWith(Action<Task<TResult>,Object>, Object, TaskScheduler)

Cria uma continuação que é executada quando o alvo Task<TResult> é concluído.

ContinueWith(Action<Task<TResult>,Object>, Object)

Cria uma continuação que recebe a informação de estado passada e que é executada quando o destino Task<TResult> é concluído.

ContinueWith(Action<Task<TResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma continuação que se executa de acordo com a condição especificada em continuationOptions.

ContinueWith(Action<Task<TResult>>, CancellationToken)

Cria uma continuação cancelável que é executada de forma assíncrona quando o destino Task<TResult> é concluído.

ContinueWith(Action<Task<TResult>>, TaskContinuationOptions)

Cria uma continuação que se executa de acordo com a condição especificada em continuationOptions.

ContinueWith(Action<Task<TResult>>, TaskScheduler)

Cria uma continuação que é executada assíncrona quando o destino Task<TResult> termina.

ContinueWith(Action<Task<TResult>>)

Cria uma continuação que é executada de forma assíncrona quando a tarefa alvo é concluída.

ContinueWith(Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma continuação que se executa quando a tarefa-alvo compete de acordo com o especificado TaskContinuationOptions. A continuação recebe um token de cancelamento e utiliza um escalonador especificado.

(Herdado de Task)
ContinueWith(Action<Task>, CancellationToken)

Cria uma continuação que recebe um token de cancelamento e executa assíncronamente quando o destino Task é concluído.

(Herdado de Task)
ContinueWith(Action<Task>, TaskContinuationOptions)

Cria uma continuação que se executa quando a tarefa alvo é concluída de acordo com o especificado TaskContinuationOptions.

(Herdado de Task)
ContinueWith(Action<Task>, TaskScheduler)

Cria uma continuação que é executada assíncrona quando o destino Task termina. A continuação utiliza um escalonador especificado.

(Herdado de Task)
ContinueWith(Action<Task>)

Cria uma continuação que é executada assíncrona quando o destino Task termina.

(Herdado de Task)
ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma continuação que é executada quando o alvo Task<TResult> é concluído.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken)

Cria uma continuação que é executada quando o alvo Task<TResult> é concluído.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskContinuationOptions)

Cria uma continuação que é executada quando o alvo Task<TResult> é concluído.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskScheduler)

Cria uma continuação que é executada quando o alvo Task<TResult> é concluído.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object)

Cria uma continuação que é executada quando o alvo Task<TResult> é concluído.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma continuação que se executa de acordo com a condição especificada em continuationOptions.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken)

Cria uma continuação que é executada assíncrona quando o destino Task<TResult> termina.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskContinuationOptions)

Cria uma continuação que se executa de acordo com a condição especificada em continuationOptions.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskScheduler)

Cria uma continuação que é executada assíncrona quando o destino Task<TResult> termina.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>)

Cria uma continuação que é executada assíncrona quando o destino Task<TResult> termina.

ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma continuação que é executada com base nas opções de continuação de tarefa especificadas quando o destino Task é concluído e devolve um valor. A continuação recebe informações de estado fornecidas pelo chamador e um token de cancelamento, utilizando o escalonador especificado.

(Herdado de Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken)

Cria uma continuação que se executa assíncrona quando o destino Task termina e devolve um valor. A continuação recebe informações de estado fornecidas pelo chamador e um token de cancelamento.

(Herdado de Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskContinuationOptions)

Cria uma continuação que é executada com base nas opções de continuação da tarefa especificadas quando o destino Task é concluído. A continuação recebe informações de estado fornecidas pelo chamador.

(Herdado de Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskScheduler)

Cria uma continuação que é executada assíncrona quando o destino Task termina. A continuação recebe informações de estado fornecidas pelo chamador e utiliza um agendador especificado.

(Herdado de Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object)

Cria uma continuação que recebe informação de estado fornecida pelo chamador e executa assíncronamente quando o destino Task termina e devolve um valor.

(Herdado de Task)
ContinueWith<TResult>(Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

Cria uma continuação que se executa de acordo com as opções de continuação especificadas e devolve um valor. A continuação recebe um token de cancelamento e utiliza um escalonador especificado.

(Herdado de Task)
ContinueWith<TResult>(Func<Task,TResult>, CancellationToken)

Cria uma continuação que se executa assíncrona quando o destino Task termina e devolve um valor. A continuação recebe um token de cancelamento.

(Herdado de Task)
ContinueWith<TResult>(Func<Task,TResult>, TaskContinuationOptions)

Cria uma continuação que se executa de acordo com as opções de continuação especificadas e devolve um valor.

(Herdado de Task)
ContinueWith<TResult>(Func<Task,TResult>, TaskScheduler)

Cria uma continuação que se executa assíncrona quando o destino Task termina e devolve um valor. A continuação utiliza um escalonador especificado.

(Herdado de Task)
ContinueWith<TResult>(Func<Task,TResult>)

Cria uma continuação que se executa assíncrona quando o destino Task<TResult> termina e devolve um valor.

(Herdado de Task)
Dispose()

Liberta todos os recursos usados pela instância atual da Task classe.

(Herdado de Task)
Dispose(Boolean)

Elimina o Task, libertando todos os seus recursos não geridos.

(Herdado de Task)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetAwaiter()

Acostuma um empregado para esperar por isto Task<TResult>.

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)
RunSynchronously()

Executa sincronizadamente Task com a corrente TaskScheduler.

(Herdado de Task)
RunSynchronously(TaskScheduler)

Executa o Task sistema síncronicamente no TaskScheduler fornecido.

(Herdado de Task)
Start()

Inicia o Task, agendando-o para execução para o atual TaskScheduler.

(Herdado de Task)
Start(TaskScheduler)

Inicia o Task, agendando-o para execução ao especificado TaskScheduler.

(Herdado de Task)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)
Wait()

Espera que a Task execução seja concluída.

(Herdado de Task)
Wait(CancellationToken)

Espera que a Task execução seja concluída. A espera termina se um token de cancelamento for cancelado antes da tarefa concluir.

(Herdado de Task)
Wait(Int32, CancellationToken)

Espera que a Task execução seja concluída. A espera termina se passar um intervalo de tempo ou se um token de cancelamento for cancelado antes da tarefa ser concluída.

(Herdado de Task)
Wait(Int32)

Espera que a Task execução seja concluída dentro de um número especificado de milissegundos.

(Herdado de Task)
Wait(TimeSpan)

Espera que a Task execução seja concluída dentro de um intervalo de tempo especificado.

(Herdado de Task)

Implementações de Interface Explícita

Name Description
IAsyncResult.AsyncWaitHandle

Obtém um WaitHandle que pode ser usado para esperar que a tarefa seja concluída.

(Herdado de Task)
IAsyncResult.CompletedSynchronously

Obtém uma indicação de se a operação foi concluída de forma síncrona.

(Herdado de Task)

Métodos da Extensão

Name Description
AsAsyncAction(Task)

Retorna uma ação assíncrona do Windows Runtime que representa uma tarefa iniciada.

AsAsyncOperation<TResult>(Task<TResult>)

Devolve uma operação assíncrona em Windows Runtime que representa uma tarefa iniciada que devolve um resultado.

DispatcherOperationWait(Task, TimeSpan)

Espera o tempo especificado para que o subjacente DispatcherOperation seja concluído.

DispatcherOperationWait(Task)

Espera indefinidamente que o subjacente DispatcherOperation seja concluído.

IsDispatcherOperationTask(Task)

Devolve um valor que indica se isto Task está associado a um DispatcherOperation.

Aplica-se a

Segurança de Thread

Todos os membros de Task<TResult>, exceto Dispose(), são seguros para threads e podem ser usados a partir de múltiplas threads em simultâneo.

Ver também