Ví dụ sau đây được lấy từ một C++ async tutorial:Làm thế nào để sử dụng một tương lai mà không cần chờ đợi?
#include <future>
#include <iostream>
#include <vector>
int twice(int m) { return 2 * m; }
int main() {
std::vector<std::future<int>> futures;
for(int i = 0; i < 10; ++i) { futures.push_back (std::async(twice, i)); }
//retrive and print the value stored in the future
for(auto &e : futures) { std::cout << e.get() << std::endl; }
return 0;
}
Làm thế nào tôi có thể sử dụng kết quả của một future
mà không cần chờ cho nó? Tức là tôi muốn làm một cái gì đó như thế này:
int sum = 0;
for(auto &e : futures) { sum += someLengthyCalculation(e.get()); }
tôi có thể vượt qua một tham chiếu đến future
-someLengthyCalculation
, nhưng tại một số điểm tôi phải gọi get
để lấy giá trị, vì vậy tôi không biết làm thế nào để viết nó mà không cần đợi phần tử đầu tiên được hoàn thành, trước khi phần tử tiếp theo có thể bắt đầu tổng hợp.
Bạn đang tìm kiếm một cái gì đó như 'then' và 'when_all' hoặc' when_any' continuations ? – kreuzerkrieg