Exportar (0) Imprimir
Expandir todo
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original.
Traducción
Original
Este tema aún no ha recibido ninguna valoración - Valorar este tema

Task (Clase)

Representa una operación asincrónica.

Espacio de nombres:  System.Threading.Tasks
Ensamblado:  mscorlib (en mscorlib.dll)
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public class Task : IAsyncResult, IDisposable

El tipo Task expone los siguientes miembros.

  NombreDescripción
Método públicoTask(Action)Inicializa una nueva instancia de Task con la acción especificada.
Método públicoTask(Action, CancellationToken)Inicializa una nueva instancia de Task con la acción y CancellationToken especificados.
Método públicoTask(Action, TaskCreationOptions)Inicializa una nueva instancia de Task con la acción y las opciones de creación especificadas.
Método públicoTask(Action<Object>, Object)Inicializa una nueva instancia de Task con la acción y el estado especificados.
Método públicoTask(Action, CancellationToken, TaskCreationOptions)Inicializa una nueva instancia de Task con la acción y las opciones de creación especificadas.
Método públicoTask(Action<Object>, Object, CancellationToken)Inicializa una nueva instancia de Task con la acción, el estado y las opciones especificados.
Método públicoTask(Action<Object>, Object, TaskCreationOptions)Inicializa una nueva instancia de Task con la acción, el estado y las opciones especificados.
Método públicoTask(Action<Object>, Object, CancellationToken, TaskCreationOptions)Inicializa una nueva instancia de Task con la acción, el estado y las opciones especificados.
Arriba
  NombreDescripción
Propiedad públicaAsyncStateObtiene el objeto de estado que se proporcionó cuando se creó el objeto Task, o null si no se proporcionó ningún objeto de estado.
Propiedad públicaCreationOptionsObtiene el objeto TaskCreationOptions usado para crear esta tarea.
Propiedad públicaMiembro estáticoCurrentIdDevuelve el identificador único del objeto Task que se está ejecutando actualmente.
Propiedad públicaExceptionObtiene 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.
Propiedad públicaMiembro estáticoFactoryProporciona acceso a métodos de generador para crear instancias de Task y Task<TResult>.
Propiedad públicaIdObtiene un identificador único para esta instancia de Task.
Propiedad públicaIsCanceledObtiene un valor que indica si esta instancia de Task ha dejado de ejecutarse debido a una cancelación.
Propiedad públicaIsCompletedObtiene un valor que indica si se ha completado esta instancia de Task.
Propiedad públicaIsFaultedObtiene un valor que indica si el objeto Task se ha completado debido a una excepción no controlada.
Propiedad públicaStatusObtiene el objeto TaskStatus de esta tarea.
Arriba
  NombreDescripción
Método públicoContinueWith(Action<Task>)Crea una continuación que se ejecuta de manera asincrónica cuando se completa el objeto Task de destino.
Método públicoContinueWith(Action<Task>, CancellationToken)Crea una continuación que se ejecuta de manera asincrónica cuando se completa el objeto Task de destino.
Método públicoContinueWith(Action<Task>, TaskContinuationOptions)Crea una continuación que se ejecuta según el objeto TaskContinuationOptionsespecificado.
Método públicoContinueWith(Action<Task>, TaskScheduler)Crea una continuación que se ejecuta de manera asincrónica cuando se completa el objeto Task de destino.
Método públicoContinueWith(Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler)Crea una continuación que se ejecuta según el objeto TaskContinuationOptionsespecificado.
Método públicoContinueWith<TResult>(Func<Task, TResult>)Crea una continuación que se ejecuta de manera asincrónica cuando se completa el objeto Task de destino.
Método públicoContinueWith<TResult>(Func<Task, TResult>, CancellationToken)Crea una continuación que se ejecuta de manera asincrónica cuando se completa el objeto Task de destino.
Método públicoContinueWith<TResult>(Func<Task, TResult>, TaskContinuationOptions)Crea una continuación que se ejecuta según la condición especificada en continuationOptions.
Método públicoContinueWith<TResult>(Func<Task, TResult>, TaskScheduler)Crea una continuación que se ejecuta de manera asincrónica cuando se completa el objeto Task de destino.
Método públicoContinueWith<TResult>(Func<Task, TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)Crea una continuación que se ejecuta según la condición especificada en continuationOptions.
Método públicoDispose()Libera todos los recursos usados por la instancia actual de la clase Task.
Método protegidoDispose(Boolean)Elimina el objeto Task y libera todos sus recursos no administrados.
Método públicoEquals(Object)Determina si el objeto Object especificado es igual al objeto Object actual. (Se hereda de Object).
Método protegidoFinalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object).
Método públicoGetHashCodeActúa como función hash para un tipo concreto. (Se hereda de Object).
Método públicoGetType Obtiene el Typede la instancia actual. (Se hereda de Object).
Método protegidoMemberwiseClone Crea una copia superficial del Object actual. (Se hereda de Object).
Método públicoRunSynchronously()Ejecuta sincrónicamente el objeto Task en el objeto TaskScheduler actual.
Método públicoRunSynchronously(TaskScheduler)Ejecuta sincrónicamente el objeto Task en el objeto TaskScheduler especificado.
Método públicoStart()Inicia el objeto Task, programando su ejecución en el objeto TaskScheduler actual.
Método públicoStart(TaskScheduler)Inicia el objeto Task, programando su ejecución en el objeto TaskScheduler especificado.
Método públicoToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Método públicoWait()Espera a que se complete la ejecución del objeto Task.
Método públicoWait(CancellationToken)Espera a que se complete la ejecución del objeto Task.
Método públicoWait(Int32)Espera a que se complete la ejecución del objeto Task.
Método públicoWait(TimeSpan)Espera a que se complete la ejecución del objeto Task.
Método públicoWait(Int32, CancellationToken)Espera a que se complete la ejecución del objeto Task.
Método públicoMiembro estáticoWaitAll(Task[])Espera a que se complete la ejecución de todos los objetos Task proporcionados.
Método públicoMiembro estáticoWaitAll(Task[], Int32)Espera a que se complete la ejecución de todos los objetos Task proporcionados.
Método públicoMiembro estáticoWaitAll(Task[], CancellationToken)Espera que se complete la ejecución de todos los objetos Task proporcionados.
Método públicoMiembro estáticoWaitAll(Task[], TimeSpan)Espera que se complete la ejecución de todos los objetos Task proporcionados.
Método públicoMiembro estáticoWaitAll(Task[], Int32, CancellationToken)Espera que se complete la ejecución de todos los objetos Task proporcionados.
Método públicoMiembro estáticoWaitAny(Task[])Espera a que se complete la ejecución de cualquiera de los objetos Task proporcionados.
Método públicoMiembro estáticoWaitAny(Task[], Int32)Espera a que se complete la ejecución de cualquiera de los objetos Task proporcionados.
Método públicoMiembro estáticoWaitAny(Task[], CancellationToken)Espera a que se complete la ejecución de cualquiera de los objetos Task proporcionados.
Método públicoMiembro estáticoWaitAny(Task[], TimeSpan)Espera a que se complete la ejecución de cualquiera de los objetos Task proporcionados.
Método públicoMiembro estáticoWaitAny(Task[], Int32, CancellationToken)Espera a que se complete la ejecución de cualquiera de los objetos Task proporcionados.
Arriba
  NombreDescripción
Implementación explícita de interfacesPropiedad privadaIAsyncResult.AsyncWaitHandleObtiene un identificador WaitHandle que se puede usar para esperar a que se complete la tarea.
Implementación explícita de interfacesPropiedad privadaIAsyncResult.CompletedSynchronouslyObtiene un valor que indica si la operación se ha completado sincrónicamente.
Arriba

Las instancias de Task se pueden crear de una serie de maneras. El enfoque más común es utilizar la propiedad Factory del tipo de Tarea para recuperar una instancia de TaskFactory que se puede utilizar para crear tareas para varios propósitos. Por ejemplo, para crear una Task que ejecuta una acción, se puede utilizar el método StartNew del generador:

// C#
var t = Task.Factory.StartNew(() => DoAction());

' Visual Basic
 Dim t = Task.Factory.StartNew(Function() DoAction())

Para obtener ejemplos más completos, vea Paralelismo de tareas (Task Parallel Library).

La clase Task también proporciona constructores que inicializan la Tarea pero que no la programan para su ejecución. Por razones de rendimiento, el método StartNew de TaskFactory debería ser el mecanismo preferido para crear y programar tareas computacionales, pero para escenarios donde se debe separar la creación y la programación, se pueden utilizar constructores, y el método Start de la tarea se puede utilizar a continuación para programar la tarea para su ejecución en un momento posterior.

Para operaciones que devuelven valores, se debería utilizar la clase Task<TResult>.

Para los desarrolladores de depuradores

Para los desarrolladores que implementan depuradores personalizados, pueden ser útiles varios miembros internos y privados de la Tarea (estos pueden cambiar de una versión a otra). El campo Int32 m_taskId sirve como dispositivo de copia de seguridad de la propiedad Id, sin embargo, puede ser más eficaz tener acceso directamente a este campo desde un depurador que tener acceso al mismo valor a través del método captador de la propiedad (el contador Int32 s_taskIdCounter se utiliza para recuperar el siguiente identificador disponible de una Tarea). De igual forma, el campo Int32 m_stateFlags almacena información sobre la etapa actual del ciclo de vida de la Tarea, información también accesible a través de la propiedad Status. El campo m_action System.Object almacena una referencia al delegado de la Tarea y el campo m_stateObject System.Object almacena el estado asincrónico pasado a la Tarea por el desarrollador. Finalmente, para los depuradores que analizan marcos de pila, el método InternalWait proporciona un marcador potencial para cuando una Tarea está entrando en una operación de espera.

NotaNota

El atributo HostProtectionAttribute aplicado a este tipo o miembro tiene el siguiente valor de la propiedad Resources: Synchronization | ExternalThreading. El atributo HostProtectionAttribute no afecta a las aplicaciones de escritorio (que normalmente se inician haciendo doble clic en un icono, escribiendo un comando o introduciendo una dirección URL en el explorador). Para obtener más información, vea la clase HostProtectionAttribute o Programación en SQL Server y atributos de protección de host.

En el ejemplo siguiente se muestra cómo iniciar una tarea mediante el método StartNew():


using System;
using System.Threading;
using System.Threading.Tasks;

class StartNewDemo
{
    // Demonstrated features:
    //		Task ctor()
    // 		Task.Factory
    //		Task.Wait()
    //		Task.RunSynchronously()
    // Expected results:
    // 		Task t1 (alpha) is created unstarted.
    //		Task t2 (beta) is created started.
    //		Task t1's (alpha) start is held until after t2 (beta) is started.
    //		Both tasks t1 (alpha) and t2 (beta) are potentially executed on threads other than the main thread on multi-core machines.
    //		Task t3 (gamma) is executed synchronously on the main thread.
    // Documentation:
    //		http://msdn.microsoft.com/en-us/library/system.threading.tasks.task_members(VS.100).aspx
    static void Main()
    {
        Action<object> action = (object obj) =>
        {
            Console.WriteLine("Task={0}, obj={1}, Thread={2}", Task.CurrentId, obj.ToString(), Thread.CurrentThread.ManagedThreadId);
        };

        // Construct an unstarted task
        Task t1 = new Task(action, "alpha");

        // Cosntruct a started task
        Task t2 = Task.Factory.StartNew(action, "beta");

        // Block the main thread to demonstate that t2 is executing
        t2.Wait();

        // Launch t1 
        t1.Start();

        Console.WriteLine("t1 has been launched. (Main Thread={0})", Thread.CurrentThread.ManagedThreadId);

        // Wait for the task to finish.
        // You may optionally provide a timeout interval or a cancellation token
        // to mitigate situations when the task takes too long to finish.
        t1.Wait();

        // Construct an unstarted task
        Task t3 = new Task(action, "gamma");

        // Run it synchronously
        t3.RunSynchronously();

        // Although the task was run synchrounously, it is a good practice to wait for it which observes for 
        // exceptions potentially thrown by that task.
        t3.Wait();
    }


}


.NET Framework

Compatible con: 4

.NET Framework Client Profile

Compatible con: 4

Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

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

¿Te ha resultado útil?
(Caracteres restantes: 1500)
Gracias por sus comentarios

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft. Reservados todos los derechos.