C++20 引入了協程(coroutines),它們是一種輕量級的線程,可以在代碼中的任何位置掛起和恢復執行。協程可以簡化異步編程,因為它們允許你以同步的方式編寫異步代碼,而不需要回調函數或 future/promise 等復雜的機制。
以下是一個使用 C++20 協程簡化異步編程的示例:
#include <iostream>
#include <coroutine>
#include <future>
#include <thread>
#include <chrono>
// 定義一個返回 std::future 的協程
std::future<void> asyncTask() {
std::cout << "Starting async task...\n";
co_await std::suspend_never{}; // 掛起,不執行任何操作
std::cout << "Async task completed.\n";
}
int main() {
// 獲取異步任務的結果
auto result = asyncTask();
// 在主線程中等待異步任務完成
result.wait();
return 0;
}
在這個示例中,我們定義了一個名為 asyncTask
的協程,它返回一個 std::future<void>
對象。在協程內部,我們使用 co_await std::suspend_never{}
掛起協程的執行,這樣主線程就可以繼續執行其他任務。當異步任務完成時,我們調用 result.wait()
等待任務完成。
這個示例展示了如何使用 C++20 協程簡化異步編程。通過使用協程,你可以編寫出更簡潔、易讀的異步代碼,而不需要處理回調函數或 future/promise 等復雜的機制。