我有一个需要立即完成工作的功能(重新分配),然后是一些后台工作(移动旧数据),我可以这样做吗?
auto fof = std::async(std::launch::async, &cont2::move_data, this, old_data, old_size);
似乎工作正常,但我很怀疑,因为它不会让我正常使用std :: async而没有东西来保存返回值并尝试在同一个线程上执行任务。< / p>
答案 0 :(得分:2)
如果返回值(std::future
)超出范围,则析构函数将暂停执行该线程,直到异步操作完成。
这意味着是的,如果你不返回结果,它将同步行为;对std::async
的调用将返回一个临时的,它将立即调用它的析构函数并阻塞直到工作完成。同样,如果将它绑定到一个值,它将继续工作,但一旦绑定值到达其范围的末尾就暂停。
例如:
{
// bind to a value
auto fof = std::async(std::launch_async,
&cont2::move_data, this, old_data, old_size);
// do work
} // at this point, execution will halt until cont2::move_data finishes