49withTimeout(Operation&& operation, boost::asio::yield_context yield, std::chrono::steady_clock::duration timeout)
51 boost::system::error_code error;
52 auto operationCompleted = std::make_shared<bool>(
false);
53 boost::asio::cancellation_signal cancellationSignal;
54 auto cyield = boost::asio::bind_cancellation_slot(cancellationSignal.slot(), yield[error]);
56 boost::asio::steady_timer timer{boost::asio::get_associated_executor(cyield), timeout};
57 timer.async_wait([&cancellationSignal, operationCompleted](boost::system::error_code errorCode) {
58 if (!errorCode and !*operationCompleted)
59 cancellationSignal.emit(boost::asio::cancellation_type::terminal);
62 *operationCompleted =
true;
65 if (error == boost::system::errc::operation_canceled) {
66 return boost::system::errc::make_error_code(boost::system::errc::timed_out);
boost::system::error_code withTimeout(Operation &&operation, boost::asio::yield_context yield, std::chrono::steady_clock::duration timeout)
Perform a coroutine operation with a timeout.
Definition WithTimeout.hpp:49