Метод get
Метод get класса future возвращает результат асинхронной операции. Если операция ещё не завершена, вызов get блокирует текущий поток до тех пор, пока результат не станет доступен. Метод не принимает параметров. После первого вызова get объект future становится недействительным, и повторный вызов приводит к неопределённому поведению. Если асинхронная операция завершилась исключением, то get повторно выбрасывает это исключение.
Синтаксис
fut.get()
Пример
Давайте запустим асинхронную задачу, которая возвращает число 42, и получим её результат с помощью метода get:
#include <iostream>
#include <future>
using namespace std;
int main()
{
future<int> fut = async([]() {
return 42;
});
int res = fut.get();
cout << res << endl;
return 0;
}
Результат выполнения кода:
42
Пример
Давайте запустим асинхронную задачу, которая возвращает строку "abcde", и получим её результат:
#include <iostream>
#include <future>
#include <string>
using namespace std;
int main()
{
future<string> fut = async([]() {
return string("abcde");
});
string res = fut.get();
cout << res << endl;
return 0;
}
Результат выполнения кода:
"abcde"
Пример
Давайте рассмотрим, как метод get повторно выбрасывает исключение, возникшее в асинхронной задаче:
#include <iostream>
#include <future>
#include <stdexcept>
using namespace std;
int main()
{
future<int> fut = async([]() {
throw runtime_error("error");
return 0;
});
try
{
int res = fut.get();
cout << res << endl;
}
catch (const exception& e)
{
cout << e.what() << endl;
}
return 0;
}
Результат выполнения кода:
"error"