task_group (Clase)
La clase task_group
representa una colección de trabajo paralelo que es posible esperar o cancelar.
Sintaxis
class task_group;
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
task_group | Con sobrecarga. Construye un nuevo objeto task_group . |
Destructor ~task_group | Destruye un objeto task_group . Se espera que llame al método wait o run_and_wait en el objeto antes de que se ejecute el destructor, a menos que el destructor se ejecute como resultado del desenredo de la pila debido a una excepción. |
Métodos públicos
Nombre | Descripción |
---|---|
cancel | Realiza un mejor intento de cancelar el subárbol del trabajo raíz en este grupo de tareas. Cada tarea programada en el grupo de tareas se cancelará de forma transitiva si es posible. |
is_canceling | Informa al autor de la llamada si el grupo de tareas está actualmente en medio de una cancelación. Esto no indica necesariamente que se llamó al método cancel en el objeto task_group (aunque ciertamente califica este método para devolver true ). Puede ser el caso de que el objeto task_group se esté ejecutando alineado y se canceló un grupo de tareas mas adelante en el árbol de trabajo. En casos como estos, donde el tiempo de ejecución puede determinar con antelación que la cancelación fluirá a través de este objeto task_group , true también se devolverá. |
run | Con sobrecarga. Programa una tarea en el objeto task_group . Si un objeto task_handle se pasa como parámetro a run , el autor de la llamada es responsable de administrar la duración del objeto task_handle . La versión del método que toma una referencia a un objeto de función como parámetro implica la asignación del montón dentro del tiempo de ejecución que puede funcionar menos bien que usar la versión que toma una referencia a un task_handle objeto. La versión que toma el parámetro _Placement hace que la tarea esté sesgada hacia la ejecución en la ubicación especificada por ese parámetro. |
run_and_wait | Con sobrecarga. Programa una tarea que se va a ejecutar alineada en el contexto de llamada con la ayuda del objeto task_group para admitir la cancelación completa. A continuación, la función espera hasta que todo el trabajo en el objeto task_group se haya completado o se haya cancelado. Si un objeto task_handle se pasa como parámetro a run_and_wait , el autor de la llamada es responsable de administrar la duración del objeto task_handle . |
wait | Espera hasta que todo el trabajo en el objeto task_group se haya completado o se haya cancelado. |
Comentarios
A diferencia de la clase muy restringida structured_task_group
, la task_group
clase es mucho más general. No tiene ninguna de las restricciones descritas por structured_task_group. task_group
Los objetos se pueden usar de forma segura entre subprocesos y utilizarse de forma libre. La desventaja de la task_group
construcción es que es posible que no funcione tan bien como la structured_task_group
construcción para las tareas que realizan pequeñas cantidades de trabajo.
Para obtener más información, consulte Paralelismo de tareas.
Jerarquía de herencia
task_group
Requisitos
Encabezado: ppl.h
Espacio de nombres: simultaneidad
cancel
Realiza un mejor intento de cancelar el subárbol del trabajo raíz en este grupo de tareas. Cada tarea programada en el grupo de tareas se cancelará de forma transitiva si es posible.
void cancel();
Comentarios
Para obtener más información, consulte Cancelación.
is_canceling
Informa al autor de la llamada si el grupo de tareas está actualmente en medio de una cancelación. Esto no indica necesariamente que se llamó al método cancel
en el objeto task_group
(aunque ciertamente califica este método para devolver true
). Puede ser el caso de que el objeto task_group
se esté ejecutando alineado y se canceló un grupo de tareas mas adelante en el árbol de trabajo. En casos como estos, donde el tiempo de ejecución puede determinar con antelación que la cancelación fluirá a través de este objeto task_group
, true
también se devolverá.
bool is_canceling();
Valor devuelto
Indicación de si el objeto task_group
está en medio de una cancelación (o se garantiza que lo estará en breve).
Comentarios
Para obtener más información, consulte Cancelación.
run
Programa una tarea en el objeto task_group
. Si un objeto task_handle
se pasa como parámetro a run
, el autor de la llamada es responsable de administrar la duración del objeto task_handle
. La versión del método que toma una referencia a un objeto de función como parámetro implica la asignación del montón dentro del tiempo de ejecución que puede funcionar menos bien que usar la versión que toma una referencia a un task_handle
objeto. La versión que toma el parámetro _Placement
hace que la tarea esté sesgada hacia la ejecución en la ubicación especificada por ese parámetro.
template<
typename _Function
>
void run(
const _Function& _Func
);
template<
typename _Function
>
void run(
const _Function& _Func,
location& _Placement
);
template<
typename _Function
>
void run(
task_handle<_Function>& _Task_handle
);
template<
typename _Function
>
void run(
task_handle<_Function>& _Task_handle,
location& _Placement
);
Parámetros
_Function
Tipo del objeto de función que se invocará para ejecutar el cuerpo del manipulador de tareas.
_Func
Función a la que se llamará para invocar el cuerpo de la tarea. Puede ser una expresión lambda u otro objeto que admita una versión del operador de llamada de función con la firma void operator()()
.
_Placement
Referencia a la ubicación donde se debe ejecutar la tarea representada por el parámetro _Func
.
_Task_handle
Manipulador del trabajo que se está programando. Tenga en cuenta que el autor de la llamada tiene la responsabilidad de la duración de este objeto. El tiempo de ejecución seguirá esperando que esté activo hasta que se haya llamado al método wait
o run_and_wait
en este objeto task_group
.
Comentarios
El tiempo de ejecución programa la función de trabajo proporcionada para que se ejecute más adelante, que puede ser después de que se recupere la función que realiza la llamada. Este método usa un objeto task_handle para contener una copia de la función de trabajo proporcionada. Por lo tanto, cualquier cambio de estado que se produzca en un objeto de función que pase a este método no aparecerá en la copia de ese objeto de función. Además, asegúrese de que la duración de cualquier objeto que pase por puntero o por referencia a la función de trabajo siga siendo válida hasta que la función de trabajo se recupere.
Si los task_group
se destruyen como resultado del desenredado de la pila de una excepción, no es necesario garantizar que se haya realizado una llamada al método wait
o run_and_wait
. En este caso, el destructor cancelará correctamente y esperará a que se complete la tarea representada por el parámetro _Task_handle
.
El método produce una excepción invalid_multiple_scheduling si el manipulador de tareas proporcionado por el parámetro _Task_handle
ya se ha programado en un objeto de grupo de tareas a través del método run
y no ha habido ninguna llamada de intervención al método wait
o run_and_wait
en ese grupo de tareas.
run_and_wait
Programa una tarea que se va a ejecutar alineada en el contexto de llamada con la ayuda del objeto task_group
para admitir la cancelación completa. A continuación, la función espera hasta que todo el trabajo en el objeto task_group
se haya completado o se haya cancelado. Si un objeto task_handle
se pasa como parámetro a run_and_wait
, el autor de la llamada es responsable de administrar la duración del objeto task_handle
.
template<
class _Function
>
task_group_status run_and_wait(
task_handle<_Function>& _Task_handle
);
template<
class _Function
>
task_group_status run_and_wait(
const _Function& _Func
);
Parámetros
_Function
Tipo del objeto de función que se invocará para ejecutar el cuerpo de la tarea.
_Task_handle
El manipulador de la tarea que se ejecutará insertada en el contexto de llamada. Tenga en cuenta que el autor de la llamada tiene la responsabilidad de la duración de este objeto. El tiempo de ejecución seguirá activo hasta que el método run_and_wait
finalice la ejecución.
_Func
Función a la que se llamará para invocar el cuerpo del trabajo. Puede ser una expresión lambda u otro objeto que admita una versión del operador de llamada de función con la firma void operator()()
.
Valor devuelto
Indicación de si se cumplió la espera o se canceló el grupo de tareas debido a una operación de cancelación explícita o a una excepción que se inicia desde una de sus tareas. Para obtener más información, consulte task_group_status.
Comentarios
Tenga en cuenta que una o varias de las tareas programadas para este objeto task_group
se pueden ejecutar insertadas dentro del contexto de llamada.
Si una o varias de las tareas programadas para este objeto task_group
producen una excepción, el tiempo de ejecución seleccionará una excepción de su elección y la propagará fuera de la llamada al método run_and_wait
.
Tras devolver el run_and_wait
método en un task_group
objeto, el tiempo de ejecución restablece el objeto a un estado limpio donde se puede reutilizar. Esto incluye el caso en el que se canceló el task_group
objeto.
En la ruta de acceso de ejecución no excepcional, debe llamar a este método o al método wait
antes de que se ejecute el destructor de task_group
.
task_group
Construye un nuevo objeto task_group
.
task_group();
task_group(
cancellation_token _CancellationToken
);
Parámetros
_CancellationToken
Token de cancelación que se va a asociar a este grupo de tareas. El grupo de tareas se cancelará cuando se cancele el token.
Comentarios
El constructor que toma un token de cancelación crea un objeto task_group
que se cancelará cuando se cancele el origen asociado al token. Proporcionar un token de cancelación explícito también aísla a este grupo de tareas de participar en una cancelación implícita de un grupo primario con un token diferente o sin token.
~task_group
Destruye un objeto task_group
. Se espera que llame al método wait
o run_and_wait
en el objeto antes de que se ejecute el destructor, a menos que el destructor se ejecute como resultado del desenredo de la pila debido a una excepción.
~task_group();
Comentarios
Si el destructor se ejecuta como resultado de la ejecución normal (por ejemplo, no se desenreda la pila debido a una excepción) y no se ha llamado a los métodos wait
ni run_and_wait
, el destructor puede producir una excepción missing_wait.
wait
Espera hasta que todo el trabajo en el objeto task_group
se haya completado o se haya cancelado.
task_group_status wait();
Valor devuelto
Indicación de si se cumplió la espera o se canceló el grupo de tareas debido a una operación de cancelación explícita o a una excepción que se inicia desde una de sus tareas. Para obtener más información, consulte task_group_status.
Comentarios
Tenga en cuenta que una o varias de las tareas programadas para este objeto task_group
se pueden ejecutar insertadas dentro del contexto de llamada.
Si una o varias de las tareas programadas para este objeto task_group
producen una excepción, el tiempo de ejecución seleccionará una excepción de su elección y la propagará fuera de la llamada al método wait
.
Al llamar wait
a en un task_group
objeto, se restablece a un estado limpio en el que se puede reutilizar. Esto incluye el caso en el que se canceló el task_group
objeto.
En la ruta de acceso de ejecución no excepcional, debe llamar a este método o al método run_and_wait
antes de que se ejecute el destructor de task_group
.
Consulte también
concurrency (espacio de nombres)
structured_task_group (clase)
task_handle (clase)