...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
The boost::asio::use_future
completion token provides
first-class support for returning a std::future
from an asynchronous operation's initiating function.
To use boost::asio::use_future
, pass it to an asynchronous
operation instead of a completion handler. For example:
std::future<std::size_t> length = my_socket.async_read_some(my_buffer, boost::asio::use_future);
Where a completion signature has the form:
void handler(boost::system::error_code ec, result_type result);
the initiating function returns a std::future
templated on result_type
.
In the above example, this is std::size_t
.
If the asynchronous operation fails, the error_code
is converted into a system_error
exception and passed back to the caller through the future.
Where a completion signature has the form:
void handler(boost::system::error_code ec);
the initiating function returns std::future<void>
. As above, an error is passed back
in the future as a system_error
exception.