forked from boostorg/asio
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add experimental::parallel_group to the overview.
- Loading branch information
1 parent
fca5406
commit 5e42c30
Showing
2 changed files
with
68 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
[/ | ||
/ Copyright (c) 2003-2022 Christopher M. Kohlhoff (chris at kohlhoff dot com) | ||
/ | ||
/ Distributed under the Boost Software License, Version 1.0. (See accompanying | ||
/ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | ||
/] | ||
|
||
[section:parallel_group Co-ordinating Parallel Operations] | ||
|
||
[note This is an experimental feature.] | ||
|
||
The [link boost_asio.reference.experimental__make_parallel_group | ||
`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 [link boost_asio.reference.experimental__wait_for_all | ||
`wait_for_all`], [link boost_asio.reference.experimental__wait_for_one | ||
`wait_for_one`], [link boost_asio.reference.experimental__wait_for_one_success | ||
`wait_for_one_success`], [link boost_asio.reference.experimental__wait_for_one_error | ||
`wait_for_one_error`], or with a custom function. | ||
|
||
The `parallel_group` facility can also be combined with [link | ||
boost_asio.reference.experimental__deferred `experimental::deferred`] as follows: | ||
|
||
experimental::make_parallel_group( | ||
stream.async_read_some(boost::asio::buffer(data), experimental::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. | ||
|
||
[heading See Also] | ||
|
||
[link boost_asio.reference.experimental__make_parallel_group experimental::make_parallel_group], | ||
[link boost_asio.reference.experimental__parallel_group experimental::parallel_group], | ||
[link boost_asio.examples.cpp14_examples.parallel_groups Parallel Groups examples (C++14)]. | ||
|
||
[endsect] |