I am trying to make the following continuation work - but f.get()
blocks. Whats wrong?
#include
#define BOOST_THREAD_PROVIDES_FUTU
The problem is, your composed future is not kept around. In fact, it is a temporary and it gets destructed as soon as the statement (with .then()
) ends.
Fix it:
int main () {
Foo foo;
auto f1 = foo.start();
auto f2 = f1.then([](boost::future<int> f) {
std::cout << "done:" << std::endl;
std::cout << f.get() << std::endl;
});
foo.finish();
f2.get();
}
Now it prints
done:
23
See it Live On Coliru
If you move the f2.get()
before the foo.finish()
it will dead lock again.