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 é executado de forma assíncrona em um thread de pool de threads em vez de de forma síncrona no thread de aplicativo main, você pode usar a Status propriedade , bem como as IsCanceledpropriedades , IsCompletede 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 Task.Run métodos e Task.Factory.StartNew 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.

Começando com aplicativos da área de trabalho direcionados ao .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 direcionados 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 Store seguem o Windows Runtime na configuração e na obtenção da 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

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

Inicializa um novo Task<TResult> com a função e o estado 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, CancellationToken, TaskCreationOptions)

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<TResult>)

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

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

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

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

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

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

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

Propriedades

AsyncState

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

(Herdado de Task)
CreationOptions

Obtém o TaskCreationOptions usado para criar esta tarefa.

(Herdado de Task)
Exception

Obtém o AggregateException que fez com que o Task fosse encerrado prematuramente. Se o Task tiver sido concluído com êxito ou ainda não tiver lançado 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 esta instância Task.

(Herdado de Task)
IsCanceled

Obtém se essa instância Task concluiu sua execução porque foi cancelada.

(Herdado de Task)
IsCompleted

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

(Herdado de Task)
IsCompletedSuccessfully

Determina se a tarefa foi executada até a conclusão.

(Herdado de Task)
IsFaulted

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

(Herdado de Task)
Result

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

Status

Obtém o TaskStatus dessa tarefa.

(Herdado de Task)

Métodos

ConfigureAwait(Boolean)

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

ConfigureAwait(Boolean)

Configura um awaiter usado para aguardar este Task.

(Herdado de Task)
ConfigureAwait(ConfigureAwaitOptions)

Configura um awaiter usado para aguardar este Task.

ConfigureAwait(ConfigureAwaitOptions)

Configura um awaiter usado para aguardar este Task.

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

Cria uma continuação que recebe informações de estado fornecidas pelo chamador e executa quando Task de destino for concluída.

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

Cria uma continuação que recebe informações de estado e um token de cancelamento fornecidos pelo chamador e que será executada de maneira assíncrona quando a Task de destino for concluída.

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

Cria uma continuação que recebe informações de estado e um token de cancelamento fornecidos pelo chamador e que será executada quando a Task de destino for concluída. 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, TaskContinuationOptions)

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

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

Cria uma continuação que recebe informações de estado e executa quando a Task<TResult> de destino for concluída.

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

Criará uma continuação executada quando o Task<TResult> de destino for concluído.

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

Criará uma continuação executada quando o Task<TResult> de destino for concluído.

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

Criará uma continuação executada quando o Task<TResult> de destino for concluído.

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

Criará uma continuação executada quando o Task<TResult> de destino for 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<TResult>>, CancellationToken)

Cria uma continuação cancelável executada de forma assíncrona quando a Task<TResult> de destino for concluída.

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

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

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

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

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

Criará uma continuação executada de forma assíncrona quando o Task<TResult> de destino for concluído.

ContinueWith(Action<Task>)

Criará uma continuação executada de forma assíncrona quando o Task de destino for concluído.

(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 Task de destino é concluído.

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

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

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

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

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

Criará uma continuação executada de forma assíncrona quando o Task de destino for concluído. A continuação usa um agendador especificado.

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

Criará uma continuação executada quando o Task<TResult> de destino for concluído.

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

Criará uma continuação executada quando o Task<TResult> de destino for concluído.

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

Criará uma continuação executada quando o Task<TResult> de destino for concluído.

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

Criará uma continuação executada quando o Task<TResult> de destino for concluído.

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

Criará uma continuação executada quando o Task<TResult> de destino for concluído.

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

Criará uma continuação executada de forma assíncrona quando o Task<TResult> de destino for concluído.

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

Criará uma continuação executada de forma assíncrona quando o Task<TResult> de destino for concluído.

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

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

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

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

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

Criará uma continuação executada de forma assíncrona quando o Task<TResult> de destino for concluído.

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

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

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

Criará uma continuação executada de forma assíncrona quando o Task de destino for concluído e retornar um valor. A continuação recebe informações de estado fornecido pelo chamador e um token de cancelamento.

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

Cria uma continuação executada com base nas opções de continuação de tarefas especificadas quando o Task de destino for concluído e retornar 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, TaskContinuationOptions)

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

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

Criará uma continuação executada de forma assíncrona quando o Task de destino for 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,TResult>)

Criará uma continuação executada de forma assíncrona quando o Task<TResult> de destino for concluído e retornar um valor.

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

Criará uma continuação executada de forma assíncrona quando o Task de destino for concluído e retornar um valor. A continuação recebe um token de cancelamento.

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

Cria uma continuação que executa de acordo com as opções de continuação especificadas e retorna um valor. Um token de cancelamento é passado à continuação e ela usa um agendador especificado.

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

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

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

Criará uma continuação executada de forma assíncrona quando o Task de destino for concluído e retornar um valor. A continuação usa um agendador especificado.

(Herdado de Task)
Dispose()

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

(Herdado de Task)
Dispose(Boolean)

Descarta o Task, liberando 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 awaiter usado para aguardar este Task<TResult>.

GetAwaiter()

Obtém um awaiter usado para aguardar este Task.

(Herdado de Task)
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)
RunSynchronously()

Executa o Task de forma síncrona no TaskScheduler atual.

(Herdado de Task)
RunSynchronously(TaskScheduler)

Executa o Task de forma síncrona no TaskScheduler fornecido.

(Herdado de Task)
Start()

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

(Herdado de Task)
Start(TaskScheduler)

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

(Herdado de Task)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
Wait()

Aguarda o Task concluir a execução.

(Herdado de Task)
Wait(CancellationToken)

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

(Herdado de Task)
Wait(Int32)

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

(Herdado de Task)
Wait(Int32, CancellationToken)

Aguarda o Task concluir a execução. A espera termina se um intervalo de tempo limite expirar ou um token de cancelamento for cancelado antes que a tarefa seja concluída.

(Herdado de Task)
Wait(TimeSpan)

Aguarda o Task concluir a execução dentro de um intervalo especificado.

(Herdado de Task)
Wait(TimeSpan, CancellationToken)

Aguarda o Task concluir a execução.

(Herdado de Task)
WaitAsync(CancellationToken)

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

WaitAsync(CancellationToken)

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

(Herdado de Task)
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.

WaitAsync(TimeSpan)

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

(Herdado de Task)
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 especificado CancellationToken tiver o cancelamento solicitado.

WaitAsync(TimeSpan, CancellationToken)

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

(Herdado de Task)
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, TimeProvider)

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

(Herdado de Task)
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 especificado CancellationToken tiver o cancelamento solicitado.

WaitAsync(TimeSpan, TimeProvider, CancellationToken)

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

(Herdado de Task)

Implantações explícitas de interface

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

DispatcherOperationWait(Task)

Aguarda indefinidamente a conclusão do DispatcherOperation subjacente.

DispatcherOperationWait(Task, TimeSpan)

Aguarda a conclusão do DispatcherOperation subjacente pelo período de tempo especificado.

IsDispatcherOperationTask(Task)

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

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.

Aplica-se a

Acesso thread-safe

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

Confira também