在C++中,協程可以使用C++20中引入的std::coroutine
庫來實現。協程使用co_await
關鍵字來暫時掛起當前協程的執行,并等待另一個協程完成后再繼續執行。以下是一個簡單的使用協程的示例:
#include <iostream>
#include <coroutine>
struct task {
struct promise_type {
task get_return_object() {
return task{std::coroutine_handle<promise_type>::from_promise(*this)};
}
std::suspend_never initial_suspend() { return {}; }
std::suspend_always final_suspend() noexcept { return {}; }
void return_void() {}
void unhandled_exception() {
std::terminate();
}
};
std::coroutine_handle<promise_type> coro;
task(std::coroutine_handle<promise_type> h) : coro(h) {}
~task() {
if (coro) coro.destroy();
}
};
task foo() {
std::cout << "Start" << std::endl;
co_await std::suspend_always{};
std::cout << "End" << std::endl;
}
int main() {
auto t = foo();
t.coro.resume();
}
在這個示例中,我們定義了一個簡單的協程foo
,在其中使用了co_await
關鍵字來暫時掛起協程的執行。在main
函數中,我們實例化了一個task
對象t
,然后手動調用了t.coro.resume()
方法來啟動協程的執行。當協程執行到co_await std::suspend_always{}
時,會暫時掛起協程的執行,直到調用resume()
方法繼續執行。