#pragma once #include "fwd.h" #include #include #include namespace NThreading { namespace NImpl { template using EnableGenericWait = std::enable_if_t< !std::is_convertible_v>>, TFuture>; } // waits for all futures [[nodiscard]] TFuture WaitAll(const TFuture& f1); [[nodiscard]] TFuture WaitAll(const TFuture& f1, const TFuture& f2); [[nodiscard]] TFuture WaitAll(TArrayRef> futures); template [[nodiscard]] NImpl::EnableGenericWait WaitAll(const TContainer& futures); // waits for the first exception or for all futures [[nodiscard]] TFuture WaitExceptionOrAll(const TFuture& f1); [[nodiscard]] TFuture WaitExceptionOrAll(const TFuture& f1, const TFuture& f2); [[nodiscard]] TFuture WaitExceptionOrAll(TArrayRef> futures); template [[nodiscard]] NImpl::EnableGenericWait WaitExceptionOrAll(const TContainer& futures); // waits for any future [[nodiscard]] TFuture WaitAny(const TFuture& f1); [[nodiscard]] TFuture WaitAny(const TFuture& f1, const TFuture& f2); [[nodiscard]] TFuture WaitAny(TArrayRef> futures); template [[nodiscard]] NImpl::EnableGenericWait WaitAny(const TContainer& futures); } #define INCLUDE_FUTURE_INL_H #include "wait-inl.h" #undef INCLUDE_FUTURE_INL_H