C++20 在标准库中首次正式引入协程(coroutines)这一特性,为异步编程和生成器模式提供了更直观、更高效的实现方式。本文从协程的基本概念入手,结合实际代码演示,帮助读者快速上手并理解协程在现代 C++ 开发中的作用。
1. 协程概念回顾
- 挂起与恢复:协程通过
co_await、co_yield或co_return将执行点暂停,随后再恢复。 - Promise 对象:每个协程都有对应的
promise_type,负责管理协程的状态、返回值以及异常处理。 - Coroutine Handle:
std::coroutine_handle<>是对协程实例的句柄,允许手动启动、检查状态、恢复或销毁。
2. 协程与异步 I/O
传统的异步 I/O 通过回调、Future/Promise 或事件循环实现,往往代码可读性较差。协程用 co_await 把异步操作像同步代码一样写,逻辑更加清晰。示例:使用 asio 的异步读取,配合协程实现流式读取。
3. 生成器模式的现代实现
之前常用 boost::generator 或手写状态机实现生成器。现在只需定义返回类型为 `std::generator