52 auto old = started_.exchange(
true);
55 result_.SetValue(f_());
57 const std::lock_guard lock(m_finished_);
61 result_.SetException(std::current_exception());
63 const std::lock_guard lock(m_finished_);
69 std::unique_lock lock(m_finished_);
70 auto rc = cv_finished_.Wait(lock, [
this]() {
return finished_.load(); });