Difference between revisions of "cpp/coroutine/coroutine handle/done"
From cppreference.com
< cpp | coroutine | coroutine handle
Andreas Krug (Talk | contribs) m (fmt) |
D41D8CD98F (Talk | contribs) (note that `done()` is useless if `final_suspend()` returns `suspend_never`) |
||
Line 12: | Line 12: | ||
{{dcl end}} | {{dcl end}} | ||
− | Checks if a suspended coroutine is suspended at its final | + | Checks if a suspended coroutine is suspended at its final suspend point. |
@1@ Returns {{c|true}} if the coroutine to which {{c|*this}} refers is suspended at its final suspend point, or {{c|false}} if the coroutine is suspended at other suspend points. The behavior is undefined if {{c|*this}} does not refer to a suspended coroutine. | @1@ Returns {{c|true}} if the coroutine to which {{c|*this}} refers is suspended at its final suspend point, or {{c|false}} if the coroutine is suspended at other suspend points. The behavior is undefined if {{c|*this}} does not refer to a suspended coroutine. | ||
Line 27: | Line 27: | ||
===Notes=== | ===Notes=== | ||
− | A no-op coroutine is | + | A no-op coroutine is never considered to be suspended at its final suspend point. |
+ | |||
+ | A coroutine with promise object {{c|p}} is considered to be suspended at its final suspend point only if, let {{c|e}} be the result of {{c|p.final_suspend()}}, {{c|e.await_ready()}} returns {{c/core|true}}. In particular, if {{c|p.final_suspend()}} returns {{ltt|cpp/coroutine/suspend_never|std::suspend_never}}, then {{c|done()}} never returns {{c|true}}. | ||
===Example=== | ===Example=== |
Revision as of 08:16, 27 October 2024
Member of other specializations |
||
bool done() const; |
(1) | (since C++20) |
Member of specialization std::coroutine_handle<std::noop_coroutine_promise> |
||
constexpr bool done() const noexcept; |
(2) | (since C++20) |
Checks if a suspended coroutine is suspended at its final suspend point.
1) Returns true if the coroutine to which *this refers is suspended at its final suspend point, or false if the coroutine is suspended at other suspend points. The behavior is undefined if *this does not refer to a suspended coroutine.
2) Always returns false.
Contents |
Parameters
(none)
Return value
1) true if the coroutine is suspended at its final suspend point, false if the coroutine is suspended at other suspend points.
2) false
Notes
A no-op coroutine is never considered to be suspended at its final suspend point.
A coroutine with promise object p is considered to be suspended at its final suspend point only if, let e be the result of p.final_suspend(), e.await_ready() returns true. In particular, if p.final_suspend() returns std::suspend_never, then done() never returns true.
Example
This section is incomplete Reason: no example |