mirror of
https://github.com/boostorg/asio.git
synced 2026-01-25 18:02:09 +00:00
The experimental::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::experimental::deferred);
...
std::move(deferred_op)(
[](std::error_code ec){ ... });
or
auto deferred_op =
timer.async_wait(
boost::asio::experimental::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::experimental::deferred(
[&](std::error_code ec)
{
timer.expires_after(
std::chrono::seconds(1));
return timer.async_wait(
boost::asio::experimental::deferred);
});
...
std::future<void> = std::move(deferred_op)(boost::asio::use_future);
37 lines
791 B
C++
37 lines
791 B
C++
//
|
|
// deferred_1.cpp
|
|
// ~~~~~~~~~~~~~~
|
|
//
|
|
// Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com)
|
|
//
|
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
//
|
|
|
|
#include <boost/asio.hpp>
|
|
#include <boost/asio/experimental/deferred.hpp>
|
|
#include <iostream>
|
|
|
|
using boost::asio::experimental::deferred;
|
|
|
|
int main()
|
|
{
|
|
boost::asio::io_context ctx;
|
|
|
|
boost::asio::steady_timer timer(ctx);
|
|
timer.expires_after(std::chrono::seconds(1));
|
|
|
|
auto deferred_op = timer.async_wait(deferred);
|
|
|
|
std::move(deferred_op)(
|
|
[](boost::system::error_code ec)
|
|
{
|
|
std::cout << "timer wait finished: " << ec.message() << "\n";
|
|
}
|
|
);
|
|
|
|
ctx.run();
|
|
|
|
return 0;
|
|
}
|