tarea (Clase) (Motor Runtime de simultaneidad)

La clase task de la biblioteca de patrones de procesamiento paralelo (PPL). Un objeto task representa el trabajo que se puede ejecutar de forma asincrónica y de forma simultánea con otras tareas y trabajos paralelos generados por los algoritmos paralelos en el Runtime de simultaneidad. Genera un resultado de tipo _ResultType al finalizar correctamente. Las tareas de tipo task<void> no producen ningún resultado. Es posible esperar y cancelar una tarea de forma independiente al resto de tareas. También se puede formular con otras tareas mediante continuaciones (then), así como con patrones de combinación (when_all) y elección (when_any). Cuando se asigna un objeto de tarea a una nueva variable, el comportamiento es el de std::shared_ptr; en otras palabras, ambos objetos representan la misma tarea subyacente.

Sintaxis

template <>
class task<void>;

template<typename _ResultType>
class task;

Parámetros

_ResultType
El tipo de resultado que produce la tarea.

Miembros

Definiciones de tipos públicas

Nombre Descripción
result_type El tipo del resultado que un objeto de esta clase produce.

Constructores públicos

Nombre Descripción
task Con sobrecarga. Construye un objeto task.

Métodos públicos

Nombre Descripción
get Con sobrecarga. Devuelve el resultado que esta tarea generó. Si la tarea no está en un estado terminal, una llamada a get esperará a que finalice la tarea. Este método no devuelve un valor cuando se llama en una tarea con un result_type de void.
is_apartment_aware Determina si la tarea desempaqueta una interfaz IAsyncInfo de Windows en tiempo de ejecución o si desciende de esta tarea.
is_done Determina si se completa la tarea.
scheduler Devuelve el programador para esta tarea
then Con sobrecarga. Agrega una tarea de continuación a esta tarea.
wait Espera que esta tarea alcance un estado terminal. Es posible que wait ejecute la tarea alineada, si se cumplen todas las dependencias de tareas, y todavía no se ha detectado para la ejecución de un trabajador en segundo plano.

Operadores públicos

Nombre Descripción
operator!= Con sobrecarga. Determina si dos objetos task representan diferentes tareas internas.
operator= Con sobrecarga. Reemplaza el contenido de un objeto task con otro.
operator== Con sobrecarga. Determina si dos objetos task representan la misma tarea interna.

Comentarios

Para obtener más información, consulte Paralelismo de tareas.

Jerarquía de herencia

task

Requisitos

Encabezado: ppltasks.h

Espacio de nombres: simultaneidad

get

Devuelve el resultado que esta tarea generó. Si la tarea no está en un estado terminal, una llamada a get esperará a que finalice la tarea. Este método no devuelve un valor cuando se llama en una tarea con un result_type de void.

_ResultType get() const;

void get() const;

Valor devuelto

Resultado de la tarea.

Comentarios

Si se cancela la tarea, una llamada a get iniciará una excepción del tipo task_canceled. Si la tarea encontró una excepción diferente o si se propagó una excepción desde una tarea anterior, una llamada a get iniciará esta excepción.

Importante

En una aplicación de la Plataforma universal de Windows (UWP), no llame a concurrency::task::wait o get (wait llama a get) en el código que se ejecuta en el subproceso de interfaz de usuario. De lo contrario, el runtime produce concurrency::invalid_operation porque estos métodos bloquean el subproceso actual y pueden provocar que la aplicación no responda. Sin embargo, puede llamar al método get para recibir el resultado de la tarea anterior en una continuación basada en tareas porque el resultado está disponible de inmediato.

is_apartment_aware

Determina si la tarea desempaqueta una interfaz IAsyncInfo de Windows en tiempo de ejecución o si desciende de esta tarea.

bool is_apartment_aware() const;

Valor devuelto

true si la tarea desencapsula una interfaz de IAsyncInfo o si desciende de dicha tarea; en caso contrario, false.

task::is_done (Método) (Runtime de simultaneidad)

Determina si se completa la tarea.

bool is_done() const;

Valor devuelto

True si la tarea se ha completado; false en caso contrario.

Comentarios

La función devuelve true si la tarea se completa o cancela (con o sin excepción de usuario).

operator!=

Determina si dos objetos task representan diferentes tareas internas.

bool operator!= (const task<_ResultType>& _Rhs) const;

bool operator!= (const task<void>& _Rhs) const;

Parámetros

_Rhs
La tarea que se va a comparar.

Valor devuelto

true si los objetos hacen referencia a distintas tareas subyacentes; en caso contrario, false.

operator=

Reemplaza el contenido de un objeto task con otro.

task& operator= (const task& _Other);

task& operator= (task&& _Other);

Parámetros

_Other
Objeto task de origen.

Valor devuelto

Comentarios

Dado que task se comporta como un puntero inteligente, después de una asignación de copia, este objeto task representa la misma tarea real que _Other.

operator==

Determina si dos objetos task representan la misma tarea interna.

bool operator== (const task<_ResultType>& _Rhs) const;

bool operator== (const task<void>& _Rhs) const;

Parámetros

_Rhs
La tarea que se va a comparar.

Valor devuelto

true si los objetos hacen referencia a la misma tarea subyacente; en caso contrario, false.

task::scheduler (Método, Runtime de simultaneidad)

Devuelve el programador para esta tarea

scheduler_ptr scheduler() const;

Valor devuelto

Un puntero al programador

task

Construye un objeto task.

task();

template<typename T>
__declspec(
    noinline) explicit task(T _Param);

template<typename T>
__declspec(
    noinline) explicit task(T _Param, const task_options& _TaskOptions);

task(
    const task& _Other);

task(
    task&& _Other);

Parámetros

T
Tipo del parámetro a partir del cual se va a construir la tarea.

_Param
Parámetro desde el que se va a construir la tarea. Esto podría ser una expresión lambda, un objeto de función, un objeto task_completion_event<result_type> o una Windows::Foundation::IAsyncInfo si está usando tareas en la aplicación de Windows Runtime. El objeto de función o la expresión lambda debe ser un tipo equivalente a std::function<X(void)>, donde X puede ser una variable de tipo result_type, task<result_type> o una Windows::Foundation::IAsyncInfo en aplicaciones de Windows Runtime.

_TaskOptions
Entre las opciones de tareas se incluyen el token de cancelación, el programador, etc.

_Other
Objeto task de origen.

Comentarios

El constructor predeterminado de un objeto task solo está presente para permitir que las tareas se usen dentro de los contenedores. No se puede usar una tarea construida de forma predeterminada hasta que no se le asigne una tarea válida. Los métodos, como get, wait o thenproducirán una excepción invalid_argument cuando se llamen en una tarea construida predeterminada.

Las tareas que se creen a partir de un objeto task_completion_event se completarán (y sus continuaciones se programarán) cuando se establezca el evento de finalización de las tareas.

La versión del constructor que toma un token de cancelación crea una tarea que se puede cancelar mediante el token cancellation_token_source desde el que se obtuvo. Las tareas que se crean sin token de cancelación no se pueden cancelar.

Las tareas que se crean a partir de la interfaz Windows::Foundation::IAsyncInfo o de una expresión lambda que devuelve una interfaz IAsyncInfo alcanzan su estado de terminal cuando se completa la operación o acción asincrónica insertada en Windows Runtime. De manera similar, las tareas que se crean a partir de una expresión lambda que devuelve un task<result_type> alcanzan su estado terminal cuando la tarea interna alcanza su estado terminal, y no cuando la expresión lambda devuelve un resultado.

El objeto task se comporta como un puntero inteligente y se puede pasar con seguridad por valor. Varios subprocesos pueden tener acceso a este objeto sin necesidad de bloqueos.

Las sobrecargas del constructor que toman una interfaz Windows::Foundation::IAsyncInfo o una expresión lambda que devuelve este tipo de interfaz solamente están disponibles para las aplicaciones de Windows Runtime.

Para obtener más información, consulte Paralelismo de tareas.

y luego

Agrega una tarea de continuación a esta tarea.

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func) const -> typename details::_ContinuationTypeTraits<_Function,
    _ResultType>::_TaskOfType;

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func,
    const task_options& _TaskOptions) const -> typename details::_ContinuationTypeTraits<_Function,
    _ResultType>::_TaskOfType;

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func,
    cancellation_token _CancellationToken,
    task_continuation_context _ContinuationContext) const -> typename details::_ContinuationTypeTraits<_Function,
    _ResultType>::_TaskOfType;

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func,
    const task_options& _TaskOptions = task_options()) const -> typename details::_ContinuationTypeTraits<_Function,
    void>::_TaskOfType;

template<typename _Function>
__declspec(
    noinline) auto then(const _Function& _Func,
    cancellation_token _CancellationToken,
    task_continuation_context _ContinuationContext) const -> typename details::_ContinuationTypeTraits<_Function,
    void>::_TaskOfType;

Parámetros

_Function
Tipo del objeto de función que invocará esta tarea.

_Func
Función de continuación que se va a ejecutar cuando se complete esta tarea. Esta función de continuación debe tomar como entrada una variable o un objeto result_type o task<result_type>, donde result_type es el tipo del resultado que esta tarea produce.

_TaskOptions
Entre las opciones de tareas se incluyen el token de cancelación, el programador y el contexto de continuación. De forma predeterminada, las tres opciones anteriores se heredan de la tarea precedente

_CancellationToken
Token de cancelación que se va a asociar a la tarea de continuación. Las tareas de continuación que se creen sin un token de cancelación heredarán el token de la tarea que le precede.

_ContinuationContext
Variable que especifica dónde debe ejecutarse la continuación. Esta variable solo es útil cuando se usa en una aplicación para UWP. Para obtener más información, consulte task_continuation_context.

Valor devuelto

Tarea de continuación creada recientemente. El tipo de resultado de la tarea devuelta está determinado por lo que _Func devuelve.

Comentarios

Las sobrecargas de then que toman una expresión lambda o un functor que devuelve una interfaz Windows::Foundation::IAsyncInfo solo están disponibles para las aplicaciones de Windows Runtime.

Para obtener más información sobre el uso de continuaciones de tareas con el fin de crear trabajo asincrónico, consulte Task Parallelism.

wait

Espera que esta tarea alcance un estado terminal. Es posible que wait ejecute la tarea alineada, si se cumplen todas las dependencias de tareas, y todavía no se ha detectado para la ejecución de un trabajador en segundo plano.

task_status wait() const;

Valor devuelto

Un valor de task_status, que podría ser completed o canceled. Si la tarea encontró una excepción durante la ejecución o se propagó una excepción desde una tarea anterior, wait producirá esta excepción.

Comentarios

Importante

En una aplicación de la Plataforma universal de Windows (UWP), no llame a wait en el código que se ejecuta en el subproceso de interfaz de usuario. De lo contrario, el runtime produce concurrency::invalid_operation porque este método bloquea el subproceso actual y pueden provocar que la aplicación no responda. Sin embargo, puede llamar al método concurrency::task::get para recibir el resultado de la tarea anterior en una continuación basada en tareas.

Consulte también

concurrency (espacio de nombres)