Task<TResult> Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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
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
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á |
| 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 |
| 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 |
| 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 |
| 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 |
| 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.