24 _cancelled.store(
true, std::memory_order_release);
25 auto handle = _waiter.exchange(
nullptr, std::memory_order_acq_rel);
26 if (handle && !handle.done()) {
35 return _cancelled.load(std::memory_order_acquire);
42 _cancelled.store(
false, std::memory_order_release);
43 _waiter.store(
nullptr, std::memory_order_release);
60 token._waiter.store(h, std::memory_order_release);
80 std::atomic<bool> _cancelled{
false};
81 std::atomic<std::coroutine_handle<>> _waiter{
nullptr};
Lightweight, zero-heap cooperative cancellation token for C++20 coroutines and services.
Definition CancellationToken.hpp:16
void reset() noexcept
Reset token state to uncancelled.
Definition CancellationToken.hpp:40
constexpr CancellationToken() noexcept=default
void cancel() noexcept
Signal cancellation to all observing tasks.
Definition CancellationToken.hpp:22
bool isCancelled() const noexcept
Check if cancellation has been requested.
Definition CancellationToken.hpp:33
WhenCancelledAwaiter whenCancelled() noexcept
Definition CancellationToken.hpp:74
Definition AsyncEvent.hpp:14
Awaitable that suspends until this token is cancelled.
Definition CancellationToken.hpp:47
bool await_ready() const noexcept
Definition CancellationToken.hpp:50
constexpr void await_resume() const noexcept
Definition CancellationToken.hpp:64
CancellationToken & token
Definition CancellationToken.hpp:48
bool await_suspend(std::coroutine_handle<> h) noexcept
Definition CancellationToken.hpp:55