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

ConfigureAwait(ConfigureAwaitOptions)

Configura um awaiter usado para aguardar isto Task.

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

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

(Herdado de Task)
Wait(TimeSpan)

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

(Herdado de Task)
WaitAsync(CancellationToken)

Recebe um Task<TResult> que será concluído quando isto Task<TResult> for concluído ou quando o especificado CancellationToken tiver pedido de cancelamento.

WaitAsync(TimeSpan, CancellationToken)

Recebe um Task<TResult> que será concluído quando isto Task<TResult> terminar, quando o timeout especificado expirar, ou quando o especificado CancellationToken for solicitado o cancelamento.

WaitAsync(TimeSpan, TimeProvider, CancellationToken)

Recebe um Task<TResult> que será concluído quando isto Task<TResult> terminar, quando o timeout especificado expirar, ou quando o especificado CancellationToken for solicitado o cancelamento.

WaitAsync(TimeSpan, TimeProvider)

Recebe um Task<TResult> que será concluído quando isto Task<TResult> terminar ou quando o tempo de espera especificado expirar.

WaitAsync(TimeSpan)

Recebe um Task<TResult> que será concluído quando isto Task<TResult> terminar ou quando o tempo de espera especificado expirar.

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