#### 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).