...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Note | |
---|---|
This is an experimental feature. |
The experimental::make_parallel_group
function may
be used to launch work that is performed in parallel, and wait for one
or all of the operations to complete. A parallel_group
implements automatic cancellation of incomplete operations. For example:
experimental::make_parallel_group( [&](auto token) { return stream.async_read_some(boost::asio::buffer(data), token); }, [&](auto token) { return timer.async_wait(token); } ).async_wait( experimental::wait_for_one(), []( std::array<std::size_t, 2> completion_order, boost::system::error_code ec1, std::size_t n1, boost::system::error_code ec2 ) { // ... } );
The conditions for completion of the group may be specified using one of
the four provided function objects wait_for_all
, wait_for_one
, wait_for_one_success
, wait_for_one_error
, or with a
custom function.
The parallel_group
facility
can also be combined with deferred
as follows:
experimental::make_parallel_group( stream.async_read_some(boost::asio::buffer(data), deferred), timer.async_wait(experimental::deferred) ).async_wait( // ... );
Note: for maximum flexibility, parallel_group
does not propagate the executor automatically to the operations within
the group.
experimental::make_parallel_group, experimental::parallel_group, Parallel Groups examples (C++11), Parallel Groups examples (C++14).