asio C++ library

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(
    asio::deferred);
...
std::move(deferred_op)(
    [](asio::error_code ec){ ... });

or:

auto deferred_op =
  timer.async_wait(
    asio::deferred);
...
std::future<void> =
  std::move(deferred_op)(
    asio::use_future);

The deferred token also supports chaining, to create simple compositions:

auto deferred_op =
  timer.async_wait(
    asio::deferred(
      [&](asio::error_code ec)
      {
        timer.expires_after(
            std::chrono::seconds(1));

        return timer.async_wait(
            asio::deferred);
      });
...
std::future<void> = std::move(deferred_op)(asio::use_future);
Deferred as the Default Completion Token

Most asynchronous operations provided by Asio have a default completion token. Although this default token can be changed by specifying a custom executor, it is normally asio::deferred. This means that we can omit the token and simply write:

auto deferred_op = timer.async_wait();
See Also

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


PrevUpHomeNext