Compartilhar via


Task<TResult> Classe

Definição

Representa uma operação assíncrona que pode retornar 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

TResult

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

Herança
Task<TResult>

Comentários

A Task<TResult> classe representa uma única operação que retorna um valor e que geralmente é executada de forma assíncrona. Task<TResult> os objetos são um dos componentes centrais do padrão assíncrono baseado em tarefa introduzido pela primeira vez no .NET Framework 4. Como o trabalho executado por um Task<TResult> objeto normalmente é realizado de forma assíncrona em uma thread do pool de threads, em vez de de forma síncrona na thread principal do aplicativo, você pode 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 maneiras. A abordagem mais comum, que está disponível a partir do .NET Framework 4.5, é chamar o método ou Task.Run<TResult>(Func<TResult>, CancellationToken) estáticoTask.Run<TResult>(Func<TResult>). Esses métodos fornecem uma maneira simples de iniciar uma tarefa usando valores padrão 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 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 maneira mais comum de iniciar uma tarefa no .NET Framework 4 é chamar o método ou TaskFactory<TResult>.StartNew estáticoTaskFactory.StartNew. A Task.Factory propriedade retorna um TaskFactory objeto e a Task<TResult>.Factory propriedade retorna um TaskFactory<TResult> objeto. As sobrecargas do método permitem StartNew que você passe argumentos, defina opções de criação de tarefas e especifique um agendador de tarefas. O exemplo a seguir usa o TaskFactory<TResult>.StartNew(Func<TResult>) método para iniciar uma tarefa. Ele é 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 tarefa.

A Task<TResult> classe também fornece construtores que inicializam a tarefa, mas que não a agendam para execução. Por motivos de desempenho, os métodos e Task.Factory.StartNew os Task.Run métodos são os mecanismos preferenciais 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 ser usado para agendar a tarefa para execução posteriormente.

A partir dos aplicativos 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 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 de chamada. Para aplicativos destinados a versões do .NET Framework antes do .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. Observe que os aplicativos da Loja seguem o Windows Runtime na configuração e obtendo a cultura padrão.

Para operações que não retornam um valor, use a Task classe. A partir do 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

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

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

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

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

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

Inicializa um novo Task<TResult> com a ação, o estado e as 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 opções de criação e funçã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 opções de criação e função especificadas.

Task<TResult>(Func<TResult>)

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

Propriedades

Nome Description
AsyncState

Obtém o objeto de estado fornecido quando o Task foi criado ou nulo se nenhum foi fornecido.

(Herdado de Task)
CreationOptions

Obtém o TaskCreationOptions usado para criar essa tarefa.

(Herdado de Task)
Exception

Obtém o AggregateException que causou o Task fim prematuramente. Se o Task concluído com êxito ou ainda não tiver gerado exceções, isso retornará null.

(Herdado de Task)
Factory

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

Id

Obtém uma ID para essa Task instância.

(Herdado de Task)
IsCanceled

Obtém se essa Task instância concluiu a execução devido ao cancelamento.

(Herdado de Task)
IsCompleted

Obtém um valor que indica se a tarefa foi concluída.

(Herdado de Task)
IsCompletedSuccessfully

Obtém se a tarefa foi executada até a conclusão.

(Herdado de Task)
IsFaulted

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

(Herdado de Task)
Result

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

Status

Obtém a TaskStatus tarefa.

(Herdado de Task)

Métodos

Nome Description
ConfigureAwait(Boolean)

Configura um aguardador usado para aguardar isso Task<TResult>.

ConfigureAwait(ConfigureAwaitOptions)

Configura um aguardador usado para aguardar isso Task.

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

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

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

Cria uma continuação que recebe informações de estado fornecidas pelo chamador e um token de cancelamento e que é executado de forma assíncrona quando o destino Task é concluído.

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

Cria uma continuação que recebe informações de estado fornecidas pelo chamador e é executada quando o destino Task é concluído. A continuação é executada com base em um conjunto de condições especificadas.

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

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

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

Cria uma continuação que recebe informações de estado fornecidas pelo chamador e é executada quando o destino Task é concluído.

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

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

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

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

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

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

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

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

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

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

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

Cria uma continuação que é executada 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 é executada de acordo com a condição especificada em continuationOptions.

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

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

ContinueWith(Action<Task<TResult>>)

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

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

Cria uma continuação que é executada quando a tarefa de destino compete de acordo com a especificada TaskContinuationOptions. A continuação recebe um token de cancelamento e usa um agendador especificado.

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

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

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

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

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

Cria uma continuação que é executada de forma assíncrona quando o destino Task é concluído. A continuação usa um agendador especificado.

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

Cria uma continuação que é executada de forma assíncrona quando o destino Task é concluído.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 retorna um valor. A continuação recebe informações de estado fornecidas pelo chamador e um token de cancelamento e usa o agendador especificado.

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

Cria uma continuação que é executada de forma assíncrona quando o destino Task é concluído e retorna 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 de 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 de forma assíncrona quando o destino Task é concluído. A continuação recebe informações de estado fornecidas pelo chamador e usa um agendador especificado.

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

Cria uma continuação que recebe informações de estado fornecidas pelo chamador e é executada de forma assíncrona quando o destino Task é concluído e retorna um valor.

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

Cria uma continuação que é executada de acordo com as opções de continuação especificadas e retorna um valor. A continuação é passada por um token de cancelamento e usa um agendador especificado.

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

Cria uma continuação que é executada de forma assíncrona quando o destino Task é concluído e retorna um valor. A continuação recebe um token de cancelamento.

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

Cria uma continuação que é executada de acordo com as opções de continuação especificadas e retorna um valor.

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

Cria uma continuação que é executada de forma assíncrona quando o destino Task é concluído e retorna um valor. A continuação usa um agendador especificado.

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

Cria uma continuação que é executada de forma assíncrona quando o destino Task<TResult> é concluído e retorna um valor.

(Herdado de Task)
Dispose()

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

(Herdado de Task)
Dispose(Boolean)

Descarta a Taskliberação de todos os seus recursos não gerenciados.

(Herdado de Task)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetAwaiter()

Obtém um aguardador usado para aguardar isso Task<TResult>.

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

Executa de Task forma síncrona no atual TaskScheduler.

(Herdado de Task)
RunSynchronously(TaskScheduler)

Executa a Task síncrona 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 para o especificado TaskScheduler.

(Herdado de Task)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
Wait()

Aguarda a conclusão da Task execução.

(Herdado de Task)
Wait(CancellationToken)

Aguarda a conclusão da Task execução. A espera será encerrada se um token de cancelamento for cancelado antes da conclusão da tarefa.

(Herdado de Task)
Wait(Int32, CancellationToken)

Aguarda a conclusão da Task execução. A espera termina se um intervalo de tempo limite decorrido ou um token de cancelamento for cancelado antes da conclusão da tarefa.

(Herdado de Task)
Wait(Int32)

Aguarda a conclusão da Task execução dentro de um número especificado de milissegundos.

(Herdado de Task)
Wait(TimeSpan, CancellationToken)

Aguarda a conclusão da Task execução.

(Herdado de Task)
Wait(TimeSpan)

Aguarda a conclusão da Task execução dentro de um intervalo de tempo especificado.

(Herdado de Task)
WaitAsync(CancellationToken)

Obtém um Task<TResult> que será concluído quando isso for Task<TResult> concluído ou quando o cancelamento especificado CancellationToken for solicitado.

WaitAsync(TimeSpan, CancellationToken)

Obtém um Task<TResult> que será concluído quando isso Task<TResult> for concluído, quando o tempo limite especificado expirar ou quando o cancelamento especificado CancellationToken for solicitado.

WaitAsync(TimeSpan, TimeProvider, CancellationToken)

Obtém um Task<TResult> que será concluído quando isso Task<TResult> for concluído, quando o tempo limite especificado expirar ou quando o cancelamento especificado CancellationToken for solicitado.

WaitAsync(TimeSpan, TimeProvider)

Obtém um Task<TResult> que será concluído quando isso Task<TResult> for concluído ou quando o tempo limite especificado expirar.

WaitAsync(TimeSpan)

Obtém um Task<TResult> que será concluído quando isso Task<TResult> for concluído ou quando o tempo limite especificado expirar.

Implantações explícitas de interface

Nome Description
IAsyncResult.AsyncWaitHandle

Obtém um WaitHandle que pode ser usado para aguardar a conclusão da tarefa.

(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 de Extensão

Nome Description
AsAsyncAction(Task)

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

AsAsyncOperation<TResult>(Task<TResult>)

Retorna uma operação assíncrona do Windows Runtime que representa uma tarefa iniciada que retorna um resultado.

DispatcherOperationWait(Task, TimeSpan)

Aguarda a quantidade de tempo especificada para que o subjacente DispatcherOperation seja concluído.

DispatcherOperationWait(Task)

Aguarda indefinidamente a conclusão DispatcherOperation do subjacente.

IsDispatcherOperationTask(Task)

Retorna um valor que indica se isso Task está associado a um DispatcherOperation.

Aplica-se a

Acesso thread-safe

Todos os membros, Task<TResult>exceto eles Dispose(), são thread-safe e podem ser usados de vários threads simultaneamente.

Confira também