C++20 引入了无栈协程,为异步编程提供了语言级支持。与传统的回调或线程模式不同,协程允许以同步的方式编写异步代码,代码逻辑更加清晰。

三个关键字

C++20 协程通过三个关键字实现:

协程框架

C++20 只提供了协程的底层机制,没有提供高级抽象。要使用协程,需要理解 promise_type、handle 和 awaiter 这三个核心组件:

struct Task {
    struct promise_type {
        Task get_return_object() { return {}; }
        std::suspend_never initial_suspend() { return {}; }
        std::suspend_never final_suspend() noexcept { return {}; }
        void return_void() {}
        void unhandled_exception() { std::terminate(); }
    };
};

Task asyncOperation() {
    co_await some_async_call();
    co_return;
}

适用场景

协程特别适合 IO 密集型场景:网络请求、文件操作、事件驱动编程。配合 asio 或自定义调度器,可以构建高性能异步系统。

协程让异步代码读起来像同步代码——复杂度被优雅地隐藏在了框架层。