返回handle的await_suspend标准行为及协程C执行逻辑问询
C++协程Awaiter返回句柄相关疑问解答
问题1:是否允许返回任意coroutine的handle?
允许返回任意合法的std::coroutine_handle<>,只要该句柄指向的协程处于可恢复状态(未完成、未被销毁)。另外,返回空句柄(nullptr)也是合法行为,此时执行co_await的协程C会被立即恢复执行。
问题2:设C为执行了co_await Awaiter的coroutine,接下来会发生什么?此外,除H.resume()操作外,C是否会执行其他代码?
当await_suspend返回句柄H时,协程C会被立即挂起,控制权自动转移到H指向的协程——H对应的协程会被自动恢复执行(等价于主动调用H.resume())。
除了外部对C的句柄调用resume()之外,C不会主动执行任何代码。C的恢复完全依赖外部触发,只有当C的句柄被调用resume()后,它才会从co_await的挂起点继续执行后续逻辑。
内容的提问来源于stack exchange,提问作者dwto
相关产品推荐
相关产品推荐

