在 C++ 中,co_await
關(guān)鍵字用于表示一個協(xié)程(coroutine)的掛起點
首先,確保你的編譯器支持 C++20 標(biāo)準(zhǔn)并啟用相應(yīng)的編譯選項。例如,對于 g++ 或 clang++,使用 -std=c++20 -fcoroutines
選項。
接下來,創(chuàng)建一個簡單的異步 I/O 操作,例如讀取文件內(nèi)容:
#include<iostream>
#include <fstream>
#include<string>
#include<chrono>
#include<thread>
#include <coroutine>
#include <experimental/coroutine>
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 asyncReadFile(const std::string& filename) {
std::ifstream file(filename);
std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
std::this_thread::sleep_for(std::chrono::seconds(1)); // 模擬 I/O 操作
std::cout << "File content: "<< content<< std::endl;
co_return;
}
int main() {
asyncReadFile("example.txt");
std::cout << "Waiting for I/O operation..."<< std::endl;
std::this_thread::sleep_for(std::chrono::seconds(2)); // 等待協(xié)程完成
return 0;
}
在這個例子中,我們定義了一個名為 Task
的協(xié)程類型,它包含一個 promise_type
結(jié)構(gòu)體,用于定義協(xié)程的行為。然后,我們創(chuàng)建了一個名為 asyncReadFile
的異步函數(shù),該函數(shù)使用 co_await
關(guān)鍵字掛起并在 I/O 操作完成后恢復(fù)執(zhí)行。
請注意,這個例子僅用于演示目的,實際上你可能需要使用更復(fù)雜的異步 I/O 庫(如 Boost.Asio)來處理真正的異步 I/O 操作。此外,你還需要一個支持協(xié)程的運行時環(huán)境,例如 C++20 協(xié)程庫或 Boost.Coroutine。