...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
The deferred
,
completion token takes a call to an asynchronous operation's initiating
function and turns it into a function object that accepts a completion
token. For example:
auto deferred_op = timer.async_wait( boost::asio::deferred); ... std::move(deferred_op)( [](boost::system::error_code ec){ ... });
or:
auto deferred_op = timer.async_wait( boost::asio::deferred); ... std::future<void> = std::move(deferred_op)( boost::asio::use_future);
The deferred token also supports chaining, to create simple compositions:
auto deferred_op = timer.async_wait( boost::asio::deferred( [&](boost::system::error_code ec) { timer.expires_after( std::chrono::seconds(1)); return timer.async_wait( boost::asio::deferred); }); ... std::future<void> = std::move(deferred_op)(boost::asio::use_future);
deferred, deferred_t, Deferred examples (C++11), Deferred examples (C++14).