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

参数

  • _Function
    将调用的函数对象类型,以执行任务句柄的主体。

  • _Func
    一个函数,将被调用以调用该任务的正文。 这可以是 lambda 表达式或支持函数调用运算符某个版本的其他对象,具有签名 void operator()()

  • _Placement
    对 _Func 参数所表示的任务应执行的位置的引用。

  • _Task_handle
    正在计划的工作的句柄。 请注意调用方要负责此对象的生存期。 运行时将继续期望其存留,直至 waitrun_and_wait 方法已在该 task_group 对象上调用。

备注

运行时计划晚些时候再运行提供的工作函数,可以在调用函数返回后运行。 此方法使用 task_handle 对象来保存所提供工作函数的副本。 因此,您传递给此方法的函数对象中发生的任何状态变更均不会出现在该函数对象的副本中。 此外,确保您通过指针或引用传递的任何对象的生存期在工作函数返回前仍然有效。

如果 task_group 因异常产生的堆栈展开而进行析构,您不必保证已对 waitrun_and_wait 方法进行调用。 在此情况下,析构函数将相应地取消,并等待 _Task_handle 形参表示的任务完成。

如果 _Task_handle 参数给予的句柄已通过 run 方法计划到任务组对象上并且该任务组上不存在对于 waitrun_and_wait 方法的中间调用,该方法将引发 invalid_multiple_scheduling 异常。

要求

**标头:**ppl.h

**命名空间:**并发

请参见

参考

task_group 类

task_group::wait 方法

task_group::run_and_wait 方法

location 类

概念

任务并行(并发运行时)