41template <
typename... PromiseTypes>
42Promise<std::vector<std::variant<PromiseTypes...>>>
45 using V = std::variant<PromiseTypes...>;
46 S selectSet{promises...};
47 auto readyPromises =
co_await selectSet;
48 std::vector<V> results;
49 for (
auto &promise : readyPromises) {
50 results.emplace_back(std::visit([](
auto *p) -> V {
return p->unwrap(); },
59template <
typename... PromiseTypes>
60Promise<std::vector<std::variant<PromiseTypes...>>>
62 co_return (
co_await waitAny(promises...));
69template <
typename... PromiseTypes>
72 S selectSet{promises...};
88template <
typename PromiseType>
91 co_return (
co_await promise);
104template <
typename... PromiseTypes>
105Promise<std::tuple<typename detail::ReplaceVoid<PromiseTypes>::type...>>
129 void enqueue(std::coroutine_handle<> handle);
Definition multipromise.h:127
virtual Promise< void > onEmpty()=0
TaskSet(const TaskSet &)=delete
std::function< void(Id, std::exception_ptr)> ErrorCallback
Definition combinators.h:146
TaskSet(TaskSet &&) noexcept=default
static std::unique_ptr< TaskSet > create()
Definition combinators.cc:163
size_t Id
Definition combinators.h:145
virtual void setOnError(ErrorCallback callback)=0
virtual Id add(Promise< void > task)=0
virtual bool empty()=0
Check if there are any active tasks on the TaskSet.
std::deque< std::coroutine_handle<> > waiters_
Definition combinators.h:130
WaitPoint(WaitPoint &&) noexcept=default
void releaseAll()
Definition combinators.cc:68
void enqueue(std::coroutine_handle<> handle)
Definition combinators.cc:74
Promise< void > wait()
Definition combinators.cc:58
size_t waiting() const
Definition combinators.h:123
WaitPoint(const WaitPoint &)=delete
void releaseOne()
Definition combinators.cc:60
Promise< std::tuple< typename detail::ReplaceVoid< PromiseTypes >::type... > > waitAll(Promise< PromiseTypes >... promises)
Definition combinators.h:106
Promise< void > raceIgnore(Promise< PromiseTypes >... promises)
Definition combinators.h:70
Promise< void > yield()
Definition combinators.cc:34
Promise< std::vector< std::variant< PromiseTypes... > > > waitAny(Promise< PromiseTypes > &...promises)
Definition combinators.h:43
Promise< std::vector< std::variant< PromiseTypes... > > > race(Promise< PromiseTypes >... promises)
Definition combinators.h:61
Definition combinators.h:76
Promise< typename ReplaceVoid< PromiseType >::type > awaitAndReplaceVoid(Promise< PromiseType > &promise)
Definition combinators.h:90
Definition async_work.cc:18
Definition combinators.cc:42
Void type
Definition combinators.h:85
Definition combinators.h:78
T type
Definition combinators.h:79
Definition combinators.h:82