Daily bit(e) C++. std::async
Добавлено 23 октября 2026 в 05:49
Daily bit(e) C++ 157, простой инструмент из C++11 для отложенного выполнения – std::async.

Представленный в C++11 механизм std::async – это простой инструмент для запуска асинхронных задач, позволяющий выполнять их параллельно или откладывать их выполнение до момента обращения к результату в том же потоке.
Преимущество std::async заключается в его простоте: он напрямую возвращает объект std::future. Однако за эту простоту приходится платить ограниченными возможностями управления процессом выполнения.
#include <future>
#include <thread>
#include <chrono>
using namespace std::literals;
// Запустить задачу асинхронно (в потоке)
auto result = std::async(std::launch::async,[](){
std::this_thread::sleep_for(200ms);
});
// Дождаться завершения задачи
result.wait();
// std::async возвращает std::future
auto future = std::async(std::launch::async, [](){
// медленная операция
return 42;
});
// Дождаться появления результата, а затем получить его
auto value = future.get();
// value == 42
// Отложенная стратегия выполнения запустит упакованную задачу
// в том потоке, в котором был вызван get()/wait().
{
auto deferred = std::async(std::launch::deferred, [](){});
// Запустить задачу в этом потоке.
deferred.wait();
}
{
auto deferred = std::async(std::launch::deferred, [](){});
// Ничто не мешает нам перенести future в другой поток
std::jthread([handle=std::move(deferred)](){
// Выполнить отложенную задачу в этом новом потоке
handle.wait();
});
}
