在C++中,then
通常與異步編程和std::future
或std::promise
一起使用
std::async
創建異步任務:auto future = std::async(std::launch::async, []() {
// 異步任務代碼
return 42;
});
std::future::then
鏈接多個異步任務:auto future = std::async(std::launch::async, []() {
// 第一個異步任務代碼
return 42;
}).then([](std::future<int> f) {
int result = f.get(); // 獲取第一個任務的結果
// 第二個異步任務代碼
return result * 2;
});
std::shared_future
來共享結果:std::shared_future<int> shared_future = std::async(std::launch::async, []() {
// 異步任務代碼
return 42;
});
// 在其他地方使用shared_future.get()獲取結果
std::promise
和std::future
手動管理異步任務:std::promise<int> promise;
std::future<int> future = promise.get_future();
std::thread([&promise]() {
// 異步任務代碼
promise.set_value(42);
}).detach();
// 在主線程中獲取結果
int result = future.get();
注意事項:
std::future::get()
之前檢查std::future
是否已經完成(is_ready()
),以避免阻塞。std::future::then
時,請確保在鏈式調用中正確處理異常。可以使用std::future::exception()
檢查是否有異常,并使用std::future::get()
重新拋出異常。std::shared_future
時,請確保在所有引用該std::shared_future
的對象之間正確同步訪問。std::promise
和std::future
手動管理異步任務時,請確保在任務完成后調用std::promise::set_value()
或std::promise::set_exception()
,以避免死鎖。std::future
時,請確保正確處理生命周期和資源管理。例如,不要在異步任務完成之前銷毀std::promise
或std::future
對象。