stdpackaged 任务和 stdfuture
std::packaged_task
绑定一个函数及其返回类型的相关承诺:
template<typename F>
auto async_deferred(F&& func) -> std::future<decltype(func())>
{
auto task = std::packaged_task<decltype(func())()>(std::forward<F>(func));
auto future = task.get_future();
std::thread(std::move(task)).detach();
return std::move(future);
}
线程立即开始运行。我们可以将其分离,或者在范围的最后加入它。当函数调用 std::thread 完成时,结果就绪。
请注意,这与 std::async
略有不同,其中被破坏时返回的 std::future
实际上会阻塞直到线程完成。