#include <iostream>
#include <string>
#include "unistd.h"
#define BOOST_THREAD_VERSION 3
#define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
#include "boost/thread/future.hpp"
int main(int argc, char** argv)
{
using boost::future;
boost::make_ready_future(3)
.then([](future<int> a){return std::string("mu");})
.then([](future<std::string> hi){
std::cout << "mu1\n";
auto ret = (int)(5 + hi.get().size());
std::cout << "mu2\n";
return ret;
})
.then([](future<int> val){ std::cout << "khm: \n" << val.get() << " viii\n" << std::endl;})
//.get()
;
sleep(10);
return 0;
}
上面的代码会发出以下内容:
mu1
mu2
khm:
如果我取消注释链末尾的.get()
,我会得到:
mu1
mu2
khm:
7 viii
正如我原先预料的那样。
但为什么呢?
我希望将then()
作为参数传递的lambdas在我得到前一个结果后立即执行。所以它应该没有最后get()
。
另一方面,如果需要最终get()
来启动执行链,为什么mu1 / mu2 / khm会在没有它的情况下打印出来?
感谢您提供的任何见解!