14 template <
typename ContextType, SomeOutcome OutcomeType,
typename FnType>
15 [[nodiscard]]
static auto
16 dispatch(ContextType& ctx, OutcomeType&& outcome, FnType&& fn)
18 auto op = outcome.getOperation();
23 [outcome = std::forward<OutcomeType>(outcome),
24 fn = std::forward<FnType>(fn)](
auto yield)
mutable {
25 if constexpr (SomeStoppableOutcome<OutcomeType>) {
26 auto& stopSource = outcome.getStopSource();
28 std::forward<decltype(fn)>(fn), outcome, stopSource, stopSource[yield]
31 std::invoke(std::forward<decltype(fn)>(fn), outcome);
38 [outcome = std::forward<OutcomeType>(outcome),
39 fn = std::forward<FnType>(fn)]()
mutable {
40 std::invoke(std::forward<decltype(fn)>(fn), outcome);
48 template <
typename ContextType,
typename FnType>
50 post(ContextType& ctx, FnType&& fn)
52 boost::asio::post(ctx.getExecutor(), [fn = std::forward<FnType>(fn)]()
mutable {
53 std::invoke(std::forward<decltype(fn)>(fn));
59 template <
typename ContextType, SomeOutcome OutcomeType,
typename FnType>
60 [[nodiscard]]
static auto
61 dispatch(ContextType& ctx, OutcomeType&& outcome, FnType&& fn)
63 auto op = outcome.getOperation();
67 [outcome = std::forward<OutcomeType>(outcome),
68 fn = std::forward<FnType>(fn)]()
mutable {
69 if constexpr (SomeStoppableOutcome<OutcomeType>) {
70 auto& stopSource = outcome.getStopSource();
72 std::forward<decltype(fn)>(fn), outcome, stopSource, stopSource.getToken()
75 std::invoke(std::forward<decltype(fn)>(fn), outcome);
83 template <
typename ContextType,
typename FnType>
85 post(ContextType& ctx, FnType&& fn)
87 boost::asio::post(ctx.getExecutor(), std::forward<FnType>(fn));
92 template <
typename ContextType, SomeOutcome OutcomeType,
typename FnType>
93 [[nodiscard]]
static auto
94 dispatch([[maybe_unused]] ContextType& ctx, OutcomeType outcome, FnType&& fn)
96 auto op = outcome.getOperation();
99 auto& stopSource = outcome.getStopSource();
100 std::invoke(std::forward<FnType>(fn), outcome, stopSource, stopSource.getToken());
102 std::invoke(std::forward<FnType>(fn), outcome);
108 template <
typename ContextType,
typename FnType>
110 post([[maybe_unused]] ContextType& ctx, FnType&& fn)
112 std::invoke(std::forward<FnType>(fn));
Definition Execution.hpp:58