Extended Futures
Tasks in the form of promises and futures have an ambivalent reputation in C++11. On the one hand, they are a lot easier to use than threads or condition variables; on the other hand, they have a significant deficiency. They cannot be composed. C++20/23 overcomes this deficiency.
I have written about tasks in the form of std::async
, std::packaged_task
, or std::promise
and std::future
. The details are here: tasks. With C++20/23 we may get extended futures.
Concurrency TS v1
std::future
The name extended futures is quite easy to explain. First, the interface of the C++11 std::future
was extended; second, there are new functions for creating special futures that are composable. I start with my first point.
The extended future has three new methods:
- The unwrapping constructor that unwraps the outer future of a wrapped future (
future<future<T>>
). - The predicate
is_ready
that returns if a shared state is available. - The method
then
that attaches...