실행 정책 확인
std::async 기본 정책은 구현이 deferred를 택할 수 있으므로 즉시 병렬이 필요하면 launch::async를 명시한다.
future, promise, async는 작업을 나중에 끝내는 방식이다. 결과를 언제 기다릴지, 예외를 어디서 받을지, 기다리지 않는 작업을 어떻게 정리할지 정해야 한다.
std::async 기본 정책은 구현이 deferred를 택할 수 있으므로 즉시 병렬이 필요하면 launch::async를 명시한다.
future::get은 결과뿐 아니라 작업 중 던진 예외도 다시 던진다.
wait_for, stop_token, timeout 정책으로 무한 대기를 막는다.
auto result = std::async(std::launch::async, [] {
return compute_report();
});
auto report = result.get(); // 예외도 이 지점에서 다시 던져진다.