std::async Tutorial & Example
本文将介绍在C++11中如何执行异步任务。
what is std::async()
std::async()是一个函数模版,可以接收一个回调作为参数,并异步执行该函数。
1 | template <class Fn, class... Args> |
返回值是一个future对象,该对象存着异步执行的函数的返回值。
第一个参数launch policy是一个启动策略,它控制着异步执行的行为,我们可以创建三种异步启动的策略:
- std::launch::async:传递进来的函数在独立的线程中执行;
- std::launch::deferred:只有某个线程对future对象调用get()的时候才会调用函数;
- std::launch::async | std::launch::deferred:默认行为;
我们可以传递以下的回调到std::async中:
- 函数指针;
- 函数对象;
- lambda函数;
假设这样的一个场景,异步调用函数:
1 | std::future<std::string> resultFromDB = std::async(std::launch::async, fetchDataFromDB, "Data"); |
std::async()的行为如下:
- 自动创建一个线程或者从线程池中获取一个,还会有创建一个promise对象;
- 然后将promise对象传递进线程,并返回future对象;
- 当传递进的参数,即函数退出时,它的返回值会被promise对象给设置进去;