Task<TResult> Clase

Definición

Representa una operación asincrónica que puede devolver un 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

El tipo del resultado generado por esta Task<TResult>.

Herencia
Task<TResult>

Comentarios

La Task<TResult> clase representa una sola operación que devuelve un valor y que normalmente se ejecuta de forma asincrónica. Task<TResult> los objetos son uno de los componentes centrales del patrón asincrónico basado en tareas que se introdujo primero en .NET Framework 4. Dado que el trabajo realizado por un Task<TResult> objeto normalmente se ejecuta de forma asincrónica en un subproceso de grupo de subprocesos en lugar de sincrónicamente en el subproceso de aplicación principal, puede usar la Status propiedad , así como las IsCanceledpropiedades , IsCompletedy IsFaulted para determinar el estado de una tarea. Normalmente, se usa una expresión lambda para especificar el trabajo que debe realizar la tarea.

Task<TResult> Las instancias se pueden crear de varias maneras. El enfoque más común, que está disponible a partir de .NET Framework 4.5, es llamar al método o Task.Run<TResult>(Func<TResult>, CancellationToken) estáticoTask.Run<TResult>(Func<TResult>). Estos métodos proporcionan una manera sencilla de iniciar una tarea mediante el uso de valores predeterminados y sin adquirir parámetros adicionales. En el ejemplo siguiente se usa el Task.Run<TResult>(Func<TResult>) método para iniciar una tarea que se repite y, a continuación, se muestra el número de iteraciones de bucle:

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

Una alternativa y la forma más común de iniciar una tarea en .NET Framework 4 es llamar al método o TaskFactory<TResult>.StartNew estáticoTaskFactory.StartNew. La Task.Factory propiedad devuelve un TaskFactory objeto y la Task<TResult>.Factory propiedad devuelve un TaskFactory<TResult> objeto . Las sobrecargas de su StartNew método permiten pasar argumentos, definir opciones de creación de tareas y especificar un programador de tareas. En el ejemplo siguiente se usa el TaskFactory<TResult>.StartNew(Func<TResult>) método para iniciar una tarea. Es funcionalmente equivalente al código del ejemplo 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 obtener ejemplos más completos, vea Programación asincrónica basada en tareas.

La Task<TResult> clase también proporciona constructores que inicializan la tarea, pero que no la programan para su ejecución. Por motivos de rendimiento, los Task.Run métodos y Task.Factory.StartNew son los mecanismos preferidos para crear y programar tareas computacionales, pero en escenarios en los que se deben separar la creación y programación de tareas, se pueden usar los constructores y el método de Start la tarea se puede usar para programar la tarea para su ejecución más adelante.

A partir de las aplicaciones de escritorio destinadas a .NET Framework 4.6, la referencia cultural del subproceso que crea e invoca una tarea se convierte en parte del contexto del subproceso. Es decir, independientemente de la referencia cultural actual del subproceso en el que se ejecuta la tarea, la referencia cultural actual de la tarea es la referencia cultural del subproceso que realiza la llamada. En el caso de las aplicaciones destinadas a versiones de .NET Framework anteriores a .NET Framework 4.6, la referencia cultural de la tarea es la referencia cultural del subproceso en el que se ejecuta la tarea. Para obtener más información, vea la sección "Referencia cultural y operaciones asincrónicas basadas en tareas" del CultureInfo tema. Tenga en cuenta que las aplicaciones de la Tienda siguen el Windows Runtime en la configuración y la obtención de la referencia cultural predeterminada.

Para las operaciones que no devuelven un valor, use la Task clase . A partir de C# 7.0, para una tarea más ligera que sea un tipo de valor en lugar de un tipo de referencia, use la System.Threading.Tasks.ValueTask<TResult> estructura .

Constructores

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

Inicializa una nueva Task<TResult> con la función y estado especificados.

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

Inicializa un nuevo objeto Task<TResult> con la acción, el estado y las opciones especificados.

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

Inicializa un nuevo objeto Task<TResult> con la acción, el estado y las opciones especificados.

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

Inicializa un nuevo objeto Task<TResult> con la acción, el estado y las opciones especificados.

Task<TResult>(Func<TResult>)

Inicializa una nueva Task<TResult> con la función especificada.

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

Inicializa una nueva Task<TResult> con la función especificada.

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

Inicializa una nueva Task<TResult> con la función y opciones de creación especificadas.

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

Inicializa una nueva Task<TResult> con la función y opciones de creación especificadas.

Propiedades

AsyncState

Obtiene el objeto de estado que se proporcionó al crearse el objeto Task, o null si no se proporcionó ningún objeto de estado.

(Heredado de Task)
CreationOptions

Obtiene el objeto TaskCreationOptions usado para crear esta tarea.

(Heredado de Task)
Exception

Obtiene la excepción AggregateException que causó la finalización prematura del objeto Task. Si Task se completó correctamente o no ha iniciado ninguna excepción, el valor devuelto será null.

(Heredado de Task)
Factory

Obtiene un método de fábrica para crear y configurar Task<TResult> instancias.

Id

Obtiene un identificador para esta instancia de Task.

(Heredado de Task)
IsCanceled

Obtiene un valor que indica si esta instancia de Task ha completado su ejecución debido a una cancelación.

(Heredado de Task)
IsCompleted

Obtiene un valor que indica si la tarea se ha completado.

(Heredado de Task)
IsCompletedSuccessfully

Obtiene si la tarea se ejecutó hasta completarse.

(Heredado de Task)
IsFaulted

Obtiene un valor que indica si el objeto Task se ha completado debido a una excepción no controlada.

(Heredado de Task)
Result

Obtiene el valor de resultado de esta Task<TResult>.

Status

Obtiene el objeto TaskStatus de esta tarea.

(Heredado de Task)

Métodos

ConfigureAwait(Boolean)

Configura un awaiter utilizado para esperar a este objeto Task<TResult>.

ConfigureAwait(Boolean)

Configura un awaiter utilizado para esperar a este objeto Task.

(Heredado de Task)
ConfigureAwait(ConfigureAwaitOptions)

Configura un awaiter utilizado para esperar a este objeto Task.

ConfigureAwait(ConfigureAwaitOptions)

Configura un awaiter utilizado para esperar a este objeto Task.

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

Crea una continuación que recibe información de estado proporcionada por el autor de la llamada y se ejecuta cuando el elemento Task de destino se completa.

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

Crea una continuación que recibe información de estado proporcionada por el autor de la llamada y un token de cancelación y que se ejecuta de forma asincrónica cuando el elemento Task de destino se completa.

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

Crea una continuación que recibe información de estado proporcionada por el autor de la llamada y un token de cancelación y que se ejecuta cuando el elemento Task de destino se completa. La continuación se ejecuta según un conjunto de condiciones especificadas y usa un programador especificado.

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

Crea una continuación que recibe información de estado proporcionada por el autor de la llamada y se ejecuta cuando el elemento Task de destino se completa. La continuación se ejecuta según un conjunto de condiciones especificadas.

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

Crea una continuación que recibe información de estado proporcionada por el autor de la llamada y se ejecuta de forma asincrónica cuando el elemento Task de destino se completa. La continuación usa un programador especificado.

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

Crea una continuación a la que se pasa información de estado y que se ejecuta cuando el objeto Task<TResult> de destino se completa.

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

Crea una continuación que se ejecuta cuando se completa el objeto Task<TResult> de destino.

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

Crea una continuación que se ejecuta cuando se completa el objeto Task<TResult> de destino.

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

Crea una continuación que se ejecuta cuando se completa el objeto Task<TResult> de destino.

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

Crea una continuación que se ejecuta cuando se completa el objeto Task<TResult> de destino.

ContinueWith(Action<Task<TResult>>)

Crea una continuación que se ejecuta de manera asincrónica cuando se completa la tarea de destino.

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

Crea una continuación que se puede cancelar y se ejecuta de forma asincrónica al completarse el parámetro Task<TResult> de destino.

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

Crea una continuación que se ejecuta según la condición especificada en continuationOptions.

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

Crea una continuación que se ejecuta según la condición especificada en continuationOptions.

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

Crea una continuación que se ejecuta de manera asincrónica cuando se completa el objeto Task<TResult> de destino.

ContinueWith(Action<Task>)

Crea una continuación que se ejecuta de manera asincrónica cuando se completa el objeto Task de destino.

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

Crea una continuación que recibe un token de cancelación y se ejecuta de forma asincrónica cuando el elemento Task de destino se completa.

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

Crea una continuación que se ejecuta cuando se completa la tarea de destino según el elemento TaskContinuationOptions especificado. La continuación recibe un token de cancelación y usa un programador especificado.

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

Crea una continuación que se ejecuta cuando se completa la tarea de destino según el elemento TaskContinuationOptions especificado.

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

Crea una continuación que se ejecuta de manera asincrónica cuando se completa el objeto Task de destino. La continuación usa un programador especificado.

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

Crea una continuación que se ejecuta cuando se completa el objeto Task<TResult> de destino.

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

Crea una continuación que se ejecuta cuando se completa el objeto Task<TResult> de destino.

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

Crea una continuación que se ejecuta cuando se completa el objeto Task<TResult> de destino.

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

Crea una continuación que se ejecuta cuando se completa el objeto Task<TResult> de destino.

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

Crea una continuación que se ejecuta cuando se completa el objeto Task<TResult> de destino.

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

Crea una continuación que se ejecuta de manera asincrónica cuando se completa el objeto Task<TResult> de destino.

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

Crea una continuación que se ejecuta de manera asincrónica cuando se completa el objeto Task<TResult> de destino.

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

Crea una continuación que se ejecuta según la condición especificada en continuationOptions.

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

Crea una continuación que se ejecuta según la condición especificada en continuationOptions.

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

Crea una continuación que se ejecuta de manera asincrónica cuando se completa el objeto Task<TResult> de destino.

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

Crea una continuación que recibe información de estado proporcionada por el autor de la llamada y se ejecuta de forma asincrónica cuando el elemento Task de destino se completa y devuelve un valor.

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

Crea una continuación que se ejecuta de forma asincrónica cuando el elemento Task de destino se completa y devuelve un valor. La continuación recibe información de estado proporcionada por el autor de la llamada y un token de cancelación.

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

Crea una continuación que se ejecuta según las opciones de continuación de la tarea especificadas cuando el elemento Task de destino se completa y devuelve un valor. La continuación recibe información de estado proporcionada por el autor de la llamada y un token de cancelación y usa el programador especificado.

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

Crea una continuación que se ejecuta según las opciones de continuación de la tarea especificadas cuando el elemento Task de destino se completa. La continuación recibe información de estado proporcionada por el autor de la llamada.

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

Crea una continuación que se ejecuta de manera asincrónica cuando se completa el objeto Task de destino. La continuación recibe información de estado proporcionada por el autor de la llamada y usa a un programador especificado.

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

Crea una continuación que se ejecuta de forma asincrónica cuando el elemento Task<TResult> de destino se completa y devuelve un valor.

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

Crea una continuación que se ejecuta de forma asincrónica cuando el elemento Task de destino se completa y devuelve un valor. La continuación recibe un token de cancelación.

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

Crea una continuación que se ejecuta según las opciones de continuación especificadas y devuelve un valor. Se pasa un token de cancelación a la continuación y usa un programador especificado.

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

Crea una continuación que se ejecuta según las opciones de continuación especificadas y devuelve un valor.

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

Crea una continuación que se ejecuta de forma asincrónica cuando el elemento Task de destino se completa y devuelve un valor. La continuación usa un programador especificado.

(Heredado de Task)
Dispose()

Libera todos los recursos usados por la instancia actual de la clase Task.

(Heredado de Task)
Dispose(Boolean)

Desecha el objeto Task y libera todos sus recursos no administrados.

(Heredado de Task)
Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetAwaiter()

Obtiene un awaiter utilizado para esperar a este objeto Task<TResult>.

GetAwaiter()

Obtiene un awaiter utilizado para esperar a este objeto Task.

(Heredado de Task)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
RunSynchronously()

Ejecuta sincrónicamente el objeto Task en el objeto TaskScheduler actual.

(Heredado de Task)
RunSynchronously(TaskScheduler)

Ejecuta sincrónicamente el objeto Task en el objeto TaskScheduler proporcionado.

(Heredado de Task)
Start()

Inicia el objeto Task, programando su ejecución en el objeto TaskScheduler actual.

(Heredado de Task)
Start(TaskScheduler)

Inicia el objeto Task, programando su ejecución en el objeto TaskScheduler especificado.

(Heredado de Task)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
Wait()

Espera a que se complete la ejecución del objeto Task.

(Heredado de Task)
Wait(CancellationToken)

Espera a que se complete la ejecución del objeto Task. La espera finalizará si un token de cancelación se cancela antes de que finalice la tarea.

(Heredado de Task)
Wait(Int32)

Espera a que el objeto Task complete la ejecución dentro de un número especificado de milisegundos.

(Heredado de Task)
Wait(Int32, CancellationToken)

Espera a que se complete la ejecución del objeto Task. La espera finalizará si transcurre un intervalo de tiempo de espera o un token de cancelación se cancela antes de que finalice la tarea.

(Heredado de Task)
Wait(TimeSpan)

Espera a que Task complete la ejecución dentro de un intervalo de tiempo especificado.

(Heredado de Task)
Wait(TimeSpan, CancellationToken)

Espera a que se complete la ejecución del objeto Task.

(Heredado de Task)
WaitAsync(CancellationToken)

Obtiene un Task<TResult> objeto que se completará cuando se Task<TResult> complete o cuando se haya solicitado la cancelación especificada CancellationToken .

WaitAsync(CancellationToken)

Obtiene un Task objeto que se completará cuando se complete o Task cuando se haya solicitado la cancelación especificada CancellationToken .

(Heredado de Task)
WaitAsync(TimeSpan)

Obtiene un Task<TResult> objeto que se completará cuando Task<TResult> finalice o cuando expire el tiempo de espera especificado.

WaitAsync(TimeSpan)

Obtiene un Task objeto que se completará cuando finalice o Task cuando expire el tiempo de espera especificado.

(Heredado de Task)
WaitAsync(TimeSpan, CancellationToken)

Obtiene un Task<TResult> objeto que se completará cuando Task<TResult> finalice, cuando expire el tiempo de espera especificado o cuando se haya solicitado la cancelación especificada CancellationToken .

WaitAsync(TimeSpan, CancellationToken)

Obtiene un Task objeto que se completará cuando Task finalice, cuando expire el tiempo de espera especificado o cuando se haya solicitado la cancelación especificada CancellationToken .

(Heredado de Task)
WaitAsync(TimeSpan, TimeProvider)

Obtiene un Task<TResult> objeto que se completará cuando Task<TResult> finalice o cuando expire el tiempo de espera especificado.

WaitAsync(TimeSpan, TimeProvider)

Obtiene un Task objeto que se completará cuando finalice o Task cuando expire el tiempo de espera especificado.

(Heredado de Task)
WaitAsync(TimeSpan, TimeProvider, CancellationToken)

Obtiene un Task<TResult> objeto que se completará cuando Task<TResult> finalice, cuando expire el tiempo de espera especificado o cuando se haya solicitado la cancelación especificada CancellationToken .

WaitAsync(TimeSpan, TimeProvider, CancellationToken)

Obtiene un Task objeto que se completará cuando Task finalice, cuando expire el tiempo de espera especificado o cuando se haya solicitado la cancelación especificada CancellationToken .

(Heredado de Task)

Implementaciones de interfaz explícitas

IAsyncResult.AsyncWaitHandle

Obtiene un identificador WaitHandle que se puede usar para esperar a que se complete la tarea.

(Heredado de Task)
IAsyncResult.CompletedSynchronously

Obtiene un valor que indica si la operación se ha completado sincrónicamente.

(Heredado de Task)

Métodos de extensión

DispatcherOperationWait(Task)

Espera indefinidamente a que se complete la DispatcherOperation subyacente.

DispatcherOperationWait(Task, TimeSpan)

Espera la cantidad de tiempo especificada para que se complete el DispatcherOperation subyacente.

IsDispatcherOperationTask(Task)

Devuelve un valor que indica si este Task está asociado con un DispatcherOperation.

AsAsyncAction(Task)

Devuelve una acción asincrónica de Windows Runtime que representa una tarea iniciada.

AsAsyncOperation<TResult>(Task<TResult>)

Devuelve una operación asincrónica de Windows Runtime que representa la tarea iniciada que devuelve un resultado.

Se aplica a

Seguridad para subprocesos

Todos los miembros de Task<TResult>, excepto para Dispose(), son seguros para subprocesos y se pueden usar desde varios subprocesos simultáneamente.

Consulte también