在 C++ 中,then
和 lambda 表達(dá)式可以結(jié)合使用,以便在異步操作完成時(shí)執(zhí)行特定的代碼。這種結(jié)合通常用于異步編程和任務(wù)鏈。下面是一個(gè)簡(jiǎn)單的示例,展示了如何將 then
與 lambda 表達(dá)式結(jié)合使用:
#include <iostream>
#include <future>
#include <chrono>
int main() {
// 創(chuàng)建一個(gè)異步任務(wù)
auto async_task = std::async(std::launch::async, []() {
std::this_thread::sleep_for(std::chrono::seconds(2)); // 模擬耗時(shí)操作
return 42; // 返回結(jié)果
});
// 使用 then 方法鏈接一個(gè) lambda 表達(dá)式,該表達(dá)式將在異步任務(wù)完成后執(zhí)行
auto result_future = async_task.then([](std::future<int> fut) {
int result = fut.get(); // 獲取異步任務(wù)的結(jié)果
std::cout << "Async task completed with result: " << result << std::endl;
return result * 2; // 返回新的結(jié)果
});
// 獲取最終結(jié)果
int final_result = result_future.get();
std::cout << "Final result: " << final_result << std::endl;
return 0;
}
在這個(gè)示例中,我們首先創(chuàng)建了一個(gè)異步任務(wù)(async_task
),該任務(wù)在一個(gè)單獨(dú)的線程上運(yùn)行并在 2 秒后返回結(jié)果 42。然后,我們使用 then
方法將一個(gè) lambda 表達(dá)式鏈接到異步任務(wù)上。當(dāng)異步任務(wù)完成時(shí),lambda 表達(dá)式將被執(zhí)行,并打印出異步任務(wù)的結(jié)果。最后,我們從 result_future
中獲取最終結(jié)果,并將其打印出來。
需要注意的是,std::future
類沒有內(nèi)置的 then
方法。在這個(gè)示例中,我們使用了一個(gè)名為 then
的自定義擴(kuò)展方法。要實(shí)現(xiàn)這個(gè)功能,你可以使用第三方庫,如 cpp-taskflow,或者自己實(shí)現(xiàn)一個(gè)類似的功能。