asio C++ library

PrevUpHomeNext

Co-ordinating Parallel Operations

[Note] 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.

See Also

experimental::make_parallel_group, experimental::parallel_group, Parallel Groups examples (C++14).


PrevUpHomeNext