Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Deferred Operations

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);
See Also

deferred, deferred_t, Deferred examples (C++11), Deferred examples (C++14).


PrevUpHomeNext