cppcoro 的 task\<T\> 到底做了什么?从 25 行到 90 行,5 版迭代拆开看
cppcoro 的 task<T> 到底做了什么?从 25 行到 90 行,5 版迭代拆开看 本专栏文章:拆开 cppcoro 给你看 · 第 1 篇 上一篇我们手写了 30 行的 Generator,理解了协程帧、co_await 的展开步骤和 promise_type 的 7 个接口。今天来真的——把 cppcoro 的 task<T> 拆开看。 cppcoro 的 task.hpp 一共 482 行,但你不需要直接从第 1 行读到第 482 行。其中差不多 300 行是关于对称转移/非对称转移的条件编译、MSVC 的 workaround、异常处理细节。真正核心的东西不到 100 行。 本文的学习策略是分 5 版迭代——每个版本只加一个功能点,每版都是可编译运行的完整代码。 版本 功能 行数 v1 只能 co_return,不能 co_await ~25 v2 加上 co_await 支持(用 sync_wait 驱动) ~40 v3 加上对称转移(final_awaitable) ~55 v4 加上异常处理 ~70 v5 完整版——对应 cppcoro 源码 ~90 v1:只能 co_return 的 task v1 的目标很简单:理解一个协程怎么把结果从协程帧传回调用者。 ...