Метод wait
Метод wait класса future блокирует текущий поток выполнения до момента, когда асинхронная операция, связанная с данным объектом future, завершится. Метод не принимает параметров и не возвращает значения. После завершения работы метода wait общий состояние становится готовым, и результат можно получить с помощью метода get. Если объект future не связан с общим состоянием, поведение не определено.
Синтаксис
future.wait()
Пример
Давайте создадим асинхронную задачу с помощью std::async и дождёмся её завершения с помощью метода wait:
#include <iostream>
#include <future>
using namespace std;
int main()
{
future<int> fut = async([]() {
return 42;
});
fut.wait();
cout << "Task completed" << endl;
int res = fut.get();
cout << res << endl;
return 0;
}
Результат выполнения кода:
"Task completed"
42
Пример
Давайте создадим promise и future, передадим значение из другого потока и дождёмся его с помощью метода wait:
#include <iostream>
#include <future>
#include <thread>
using namespace std;
int main()
{
promise<int> prom;
future<int> fut = prom.get_future();
thread th([&prom]() {
prom.set_value(123);
});
fut.wait();
cout << "Value is ready" << endl;
int res = fut.get();
cout << res << endl;
th.join();
return 0;
}
Результат выполнения кода:
"Value is ready"
123