← 模式
异步执行任务
12345678910111213141516171819 | #include <future> int func() { int some_value = 0; // 执行工作... return some_value; } int main() { std::future<int> result_future = std::async(func); // 做些其他事... int result = result_future.get(); } |
此模式采用 CC0 公共领域贡献 许可。
需要 c++11 或更新版本。
意图
高阶的任务异步执行。
描述
std::async
提供了一种高阶的方式来完成任务的异步执行,它抽象了 std::thread
和 std::promise
。
在第 14 行,我们调用 std::async
,将 func
作为要异步执行的函数传递给它。func
的参数可以作为额外的参数传递给 std::async
。返回值是一个 std::future<int>
,代表一个将在未来某个时刻从任务返回的 int
值。
默认情况下,std::async
会自行决定是并发执行任务,还是等到我们请求结果时才执行任务。如果我们想明确指定其中一种行为,可以在第一个参数位置使用一个标志。要请求并发执行(如果可能),我们使用 std::launch::async
。要请求仅在需要结果时才执行任务,我们使用 std::launch::deferred
。
在第 18 行,我们使用 std::future
的 get
成员函数来获取异步任务的结果。这个调用会阻塞直到结果可用。
注意:我们必须捕获 std::async
返回的 future 对象,这一点非常重要。如果我们不这样做,那么调用将始终是阻塞的。