16 template<
typename T,
template<
typename>
typename... Exts>
20 for (
auto& task : tasks)
21 result << co_await task;
27 template<
typename F,
typename Input>
33 using ResultType_t = TaskType_t::template ReplaceResult_t<QVector<OrigResultType_t>>;
37 template<
typename Input,
typename F>
40 QVector<typename detail::ParallelTraits<F, Input>::OrigResultType_t> result;
41 for (
auto&& input : inputs)
42 result << co_await mkTask (std::move (input));
46 template<
typename Input,
typename F>
50 for (
auto&& input : inputs)
51 result += co_await mkTask (std::move (input));
55 template<
typename... Ts,
template<
typename>
typename... Exts>
58 co_return std::tuple<Ts...> { co_await tasks... };
std::invoke_result_t< F, Input > TaskType_t
auto InParallelSemigroup(QVector< Input > &&inputs, F &&mkTask) -> detail::ParallelTraits< F, Input >::TaskType_t
Task< QVector< T >, Exts... > InParallel(QVector< Task< T, Exts... >> tasks)
typename TaskType_t::ResultType_t OrigResultType_t
TaskType_t::template ReplaceResult_t< QVector< OrigResultType_t > > ResultType_t