combines a set of futures into a single future that becomes ready when
any of the futures in the set become ready. The return
type and semantics are subtly different to the Concurrency TS specification.
For the Concurrency TS version, see the
std::experimental::when_any function template and
std::experimental::when_any function template (iterator
template<typename ... FutureTypes> std::future<std::tuple<FutureTypes...> > when_any(FutureTypes&&... futures);
Each type in
is an instantiation of either
std::shared_future. For each
a call to
future which is an instantation of
std::future must be passed as
The supplied futures are transferred into internal storage. The asynchronous
result associated with each future is marked so that when any of
the futures are ready the future returned from
when_any is ready.
If any of the futures are already ready at the
point of the call, the returned future will also be ready.
> which becomes ready
when any of the supplied futures becomes ready.
When the future is ready, the stored value is
std::tuple holding the supplied
The marking of the first future as ready synchronizes
with any call to
get() on the returned future that sees
the result as ready.
std::bad_alloc if the required internal
storage cannot be allocated.
On compilers that don't support variadic templates, an overloaded set of function templates is provided that supports passing of up to 5 arguments.
On compilers that don't provide
jss::tuple is used instead. The macro
defined to either
jss::tuple as appropriate.