packaged_task使用与async对比
请说明std::packaged_task的用途及其与std::async的区别。
回答
Yahuda
std::packaged_task包装可调用对象,将其返回值与future关联,可灵活控制执行时机和线程。
std::packaged_task<int()> task([]{ return 42; });
auto f = task.get_future();
task(); // 在当前线程执行
int r = f.get();
// 也可在特定线程执行
std::thread t(std::move(task)); t.join();
与std::async的区别:
async自动管理线程/任务调度,简单直接packaged_task不自动创建线程,执行位置更灵活async默认可能延迟或异步执行(由实现决定)packaged_task适合集成到线程池等自定义调度器中