C++20协程入门与co_await语法
请介绍C++20协程的基本概念,解释co_await关键字的作用及awaitable接口要求。
回答
小字辈
C++20协程是通过编译器将函数转换为状态机的无栈协程。co_await挂起协程并等待异步操作完成。
一个awaitable类型需要实现三个方法:
await_ready():返回操作是否已完成,true则直接继续await_suspend(std::coroutine_handle<>):挂起时调用,将协程句柄存入异步操作await_resume():恢复时调用,返回co_await表达式的结果
简单示例:
struct Awaiter {
bool await_ready() noexcept { return false; }
void await_suspend(std::coroutine_handle<> h) { /* 保存句柄 */ }
int await_resume() noexcept { return 42; }
};
Task myCoroutine() {
int result = co_await Awaiter{};
co_return result;
}
协程比回调更直观地表达异步控制流。