Класс task_group

Класс task_group представляет коллекцию параллельной работы, для которой возможно ожидание или отмена.

Синтаксис

class task_group;

Участники

Открытые конструкторы

Имя Описание
task_group Перегружен. Создает новый объект task_group.
Деструктор ~task_group Уничтожает объект task_group . Ожидается, что перед выполнением деструктора вызовет waitrun_and_wait либо метод или метод, если деструктор не выполняется в результате очистки стека из-за исключения.

Открытые методы

Имя Описание
cancel Делает лучшие усилия, чтобы отменить вложенный дерево работы, корневой в этой группе задач. Каждая задача, запланированная в группе задач, будет отменена транзитивно, если это возможно.
is_canceling Сообщает вызывающему объекту о том, находится ли группа задач в настоящее время в разгар отмены. Это не обязательно означает, что cancel метод был вызван для task_group объекта (хотя такой, безусловно, квалифифизирует этот метод для возврата true). Это может быть случай, когда task_group объект выполняется встроенным образом, и группа задач, дальнейшая работа в дереве работы была отменена. В таких случаях, когда среда выполнения может заранее определить, что отмена будет проходить через этот task_group объект, true также будет возвращена.
run Перегружен. Планирует задачу в объекте task_group . task_handle Если объект передается в качестве параметраrun, вызывающий объект отвечает за управление временем существования task_handle объекта. Версия метода, которая принимает ссылку на объект функции в качестве параметра, включает выделение кучи внутри среды выполнения, которая может быть менее хорошо работает, чем с помощью версии, которая принимает ссылку на task_handle объект. Версия, принимающая параметр _Placement, заставляет задачу стремиться к выполнению в расположении, указанном этим параметром.
run_and_wait Перегружен. Планирует выполнение задачи в встроенном контексте вызова с помощью объекта для полной task_group поддержки отмены. Затем функция ожидает завершения или отмены всех работ над task_group объектом. task_handle Если объект передается в качестве параметраrun_and_wait, вызывающий объект отвечает за управление временем существования task_handle объекта.
Подожди Ожидает завершения или отмены всех работ над task_group объектом.

Замечания

В отличие от строго ограниченного structured_task_group класса, task_group класс гораздо более общий. У него нет ограничений, описанных structured_task_group. task_group Объекты можно безопасно использовать в потоках и использовать в свободном виде. Недостатком task_group конструкции является то, что она не может выполняться, а также structured_task_group конструкция для задач, выполняющих небольшие объемы работы.

Дополнительные сведения см. в разделе "Параллелизм задач".

Иерархия наследования

task_group

Требования

Заголовок: ppl.h

Пространство имен: concurrency

Отмена

Делает лучшие усилия, чтобы отменить вложенный дерево работы, корневой в этой группе задач. Каждая задача, запланированная в группе задач, будет отменена транзитивно, если это возможно.

void cancel();

Замечания

Дополнительные сведения см. в разделе "Отмена".

is_canceling

Сообщает вызывающему объекту о том, находится ли группа задач в настоящее время в разгар отмены. Это не обязательно означает, что cancel метод был вызван для task_group объекта (хотя такой, безусловно, квалифифизирует этот метод для возврата true). Это может быть случай, когда task_group объект выполняется встроенным образом, и группа задач, дальнейшая работа в дереве работы была отменена. В таких случаях, когда среда выполнения может заранее определить, что отмена будет проходить через этот task_group объект, true также будет возвращена.

bool is_canceling();

Возвращаемое значение

Указание того, находится ли task_group объект в разгар отмены (или гарантированно будет в ближайшее время).

Замечания

Дополнительные сведения см. в разделе "Отмена".

run

Планирует задачу в объекте task_group . task_handle Если объект передается в качестве параметраrun, вызывающий объект отвечает за управление временем существования task_handle объекта. Версия метода, которая принимает ссылку на объект функции в качестве параметра, включает выделение кучи внутри среды выполнения, которая может быть менее хорошо работает, чем с помощью версии, которая принимает ссылку на task_handle объект. Версия, принимающая параметр _Placement, заставляет задачу стремиться к выполнению в расположении, указанном этим параметром.

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
);

Параметры

_Функции
Тип объекта функции, который будет вызываться для выполнения текста дескриптора задачи.

_Func
Функция, которая будет вызываться для вызова текста задачи. Это может быть лямбда-выражение или другой объект, поддерживающий версию оператора вызова функции с подписью void operator()().

_Размещения
Ссылка на расположение, в котором должна выполняться задача, представленная параметром _Func.

_Task_handle
Дескриптор запланированной работы. Обратите внимание, что вызывающий объект несет ответственность за время существования этого объекта. Среда выполнения будет продолжать ожидать, что она будет жить до waitrun_and_wait вызова метода или объекта task_group .

Замечания

Среда выполнения планирует выполнение предоставленной рабочей функции в последующее время, которая может быть после возврата вызывающей функции. Этот метод использует объект task_handle для хранения копии предоставленной рабочей функции. Таким образом, любые изменения состояния, происходящие в объекте функции, передаваемом этому методу, не будут отображаться в копии этого объекта функции. Кроме того, убедитесь, что время существования всех объектов, которые передаются указателем или по ссылке на рабочую функцию, остаются действительными до тех пор, пока не будет возвращена рабочая функция.

task_group Если деструкция в результате очистки стека от исключения не требуется гарантировать, что вызов был выполнен в любой wait из методов.run_and_wait В этом случае деструктор будет соответствующим образом отменять и ожидать завершения задачи, представленной параметром _Task_handle .

Метод вызывает исключение invalid_multiple_scheduling , если дескриптор задачи, _Task_handle заданный параметром, уже был запланирован на объект группы задач с помощью run метода, и не было интервенного вызова waitrun_and_wait либо метода в этой группе задач.

run_and_wait

Планирует выполнение задачи в встроенном контексте вызова с помощью объекта для полной task_group поддержки отмены. Затем функция ожидает завершения или отмены всех работ над task_group объектом. task_handle Если объект передается в качестве параметраrun_and_wait, вызывающий объект отвечает за управление временем существования 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
);

Параметры

_Функции
Тип объекта функции, который будет вызван для выполнения основной части задачи.

_Task_handle
Дескриптор задачи, которая будет выполняться в контексте вызова. Обратите внимание, что вызывающий объект несет ответственность за время существования этого объекта. Среда выполнения будет продолжать ожидать, что она будет жить, пока метод не run_and_wait завершит выполнение.

_Func
Функция, которая будет вызываться для вызова текста работы. Это может быть лямбда-выражение или другой объект, поддерживающий версию оператора вызова функции с подписью void operator()().

Возвращаемое значение

Указание того, была ли выполнена ожидание или группа задач была отменена, из-за явной операции отмены или исключения, вызываемого из одной из своих задач. Дополнительные сведения см. в task_group_status.

Замечания

Обратите внимание, что одна или несколько задач, запланированных для этого task_group объекта, могут выполняться встроенным образом в контексте вызова.

Если одна или несколько задач, запланированных для этого task_group объекта, создает исключение, среда выполнения выберет одно из таких исключений выбора и распространяет его из вызова run_and_wait метода.

При возвращении из метода объекта run_and_waittask_group среда выполнения сбрасывает объект в чистое состояние, где его можно повторно использовать. Это включает в себя случай, когда task_group объект был отменен.

В неисключающем пути выполнения у вас есть мандат на вызов этого метода или wait метода перед деструктором task_group выполнения.

task_group

Создает новый объект task_group.

task_group();

task_group(
   cancellation_token _CancellationToken
);

Параметры

_CancellationToken
Токен отмены для связывания с этой группой задач. Группа задач будет отменена, когда будет отменен токен.

Замечания

Конструктор, который принимает токен отмены, создает task_group, которая будет отменена, когда будет отменен источник, связанный с этим токеном. Предоставление явного токена отмены также изолирует эту группу задач от участия в неявной отмене из родительской группы с другим токеном или без токена.

~Task_group

Уничтожает объект task_group . Ожидается, что перед выполнением деструктора вызовет waitrun_and_wait либо метод или метод, если деструктор не выполняется в результате очистки стека из-за исключения.

~task_group();

Замечания

Если деструктор выполняется в результате нормального выполнения (например, не очистка стека из-за исключения), а ни waitrun_and_wait методы не были вызваны, деструктор может вызвать исключение missing_wait .

wait

Ожидает завершения или отмены всех работ над task_group объектом.

task_group_status wait();

Возвращаемое значение

Указание того, была ли выполнена ожидание или группа задач была отменена, из-за явной операции отмены или исключения, вызываемого из одной из своих задач. Дополнительные сведения см. в task_group_status.

Замечания

Обратите внимание, что одна или несколько задач, запланированных для этого task_group объекта, могут выполняться встроенным образом в контексте вызова.

Если одна или несколько задач, запланированных для этого task_group объекта, создает исключение, среда выполнения выберет одно из таких исключений выбора и распространяет его из вызова wait метода.

task_group Вызов wait объекта сбрасывает его в чистое состояние, где его можно повторно использовать. Это включает в себя случай, когда task_group объект был отменен.

В неисключающем пути выполнения у вас есть мандат на вызов этого метода или run_and_wait метода перед деструктором task_group выполнения.

См. также

Пространство имен concurrency
Класс structured_task_group
Класс task_handle