|  | 
| ![[Note]](../../../note.png) | 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(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, asio::error_code ec1, std::size_t n1, asio::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(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++14).