Create a group of operations that may be launched in parallel.
template< typename... Ops> parallel_group< Ops...> make_parallel_group( Ops... ops);
For example:
asio::experimental::make_parallel_group( [&](auto token) { return in.async_read_some(asio::buffer(data), token); }, [&](auto token) { return timer.async_wait(token); } ).async_wait( asio::experimental::wait_for_all(), []( std::array<std::size_t, 2> completion_order, std::error_code ec1, std::size_t n1, std::error_code ec2 ) { switch (completion_order[0]) { case 0: { std::cout << "descriptor finished: " << ec1 << ", " << n1 << "\n"; } break; case 1: { std::cout << "timer finished: " << ec2 << "\n"; } break; } } );