-
Notifications
You must be signed in to change notification settings - Fork 10
Open
Description
Possible (untested) implementation:
template <class... Types>
inline capy::io_task<Types...> cancel_at(
capy::io_task<Types...> task,
corosio::timer& timer,
std::chrono::steady_clock::time_point timeout,
std::error_code cancel_ec = error::canceled)
{
timer.expires_at(timeout);
auto [winner_index, result] = co_await capy::when_any(std::move(task), timer.wait());
if (winner_index == 0u)
co_return std::move(result);
else
co_return {cancel_ec};
}
template <class... Types>
inline capy::io_task<Types...> cancel_after(
capy::io_task<Types...> task,
corosio::timer& timer,
std::chrono::steady_clock::duration timeout,
std::error_code cancel_ec = error::canceled)
{
return cancel_at(std::move(task), timer, std::chrono::steady_clock::now() + timeout, cancel_ec);
}Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels