Класс task_group
Класс task_group
представляет коллекцию параллельной работы, для которой возможно ожидание или отмена.
Синтаксис
class task_group;
Участники
Открытые конструкторы
Имя | Описание |
---|---|
task_group | Перегружен. Создает новый объект task_group . |
Деструктор ~task_group | Уничтожает объект task_group . Ожидается, что перед выполнением деструктора вызовет wait run_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
Дескриптор запланированной работы. Обратите внимание, что вызывающий объект несет ответственность за время существования этого объекта. Среда выполнения будет продолжать ожидать, что она будет жить до wait
run_and_wait
вызова метода или объекта task_group
.
Замечания
Среда выполнения планирует выполнение предоставленной рабочей функции в последующее время, которая может быть после возврата вызывающей функции. Этот метод использует объект task_handle для хранения копии предоставленной рабочей функции. Таким образом, любые изменения состояния, происходящие в объекте функции, передаваемом этому методу, не будут отображаться в копии этого объекта функции. Кроме того, убедитесь, что время существования всех объектов, которые передаются указателем или по ссылке на рабочую функцию, остаются действительными до тех пор, пока не будет возвращена рабочая функция.
task_group
Если деструкция в результате очистки стека от исключения не требуется гарантировать, что вызов был выполнен в любой wait
из методов.run_and_wait
В этом случае деструктор будет соответствующим образом отменять и ожидать завершения задачи, представленной параметром _Task_handle
.
Метод вызывает исключение invalid_multiple_scheduling , если дескриптор задачи, _Task_handle
заданный параметром, уже был запланирован на объект группы задач с помощью run
метода, и не было интервенного вызова wait
run_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_wait
task_group
среда выполнения сбрасывает объект в чистое состояние, где его можно повторно использовать. Это включает в себя случай, когда task_group
объект был отменен.
В неисключающем пути выполнения у вас есть мандат на вызов этого метода или wait
метода перед деструктором task_group
выполнения.
task_group
Создает новый объект task_group
.
task_group();
task_group(
cancellation_token _CancellationToken
);
Параметры
_CancellationToken
Токен отмены для связывания с этой группой задач. Группа задач будет отменена, когда будет отменен токен.
Замечания
Конструктор, который принимает токен отмены, создает task_group
, которая будет отменена, когда будет отменен источник, связанный с этим токеном. Предоставление явного токена отмены также изолирует эту группу задач от участия в неявной отмене из родительской группы с другим токеном или без токена.
~task_group
Уничтожает объект task_group
. Ожидается, что перед выполнением деструктора вызовет wait
run_and_wait
либо метод или метод, если деструктор не выполняется в результате очистки стека из-за исключения.
~task_group();
Замечания
Если деструктор выполняется в результате нормального выполнения (например, не очистка стека из-за исключения), а ни wait
run_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