18#include "pw_async2/dispatcher.h"
19#include "pw_function/function.h"
31template <typename Func = Function<Poll<>(Context&)>>
35 explicit constexpr FuncTask(Func&& func) : func_(std::forward<Func>(func)) {}
51template <
typename Func>
52FuncTask(Func&&) -> FuncTask<Func>;
72template <typename Func = Function<Poll<>()>,
74 ? ReturnValuePolicy::kDiscard
75 : ReturnValuePolicy::kKeep>
80 std::conditional_t<std::is_void_v<std::invoke_result_t<Func>>,
82 std::invoke_result_t<Func>>;
86 : func_(std::forward<Func>(func)) {}
98 bool has_value()
const {
return return_value_.has_value(); }
111 return *return_value_;
116 if constexpr (std::is_void_v<std::invoke_result_t<Func>>) {
118 return_value_.emplace();
120 return_value_ = func_();
126 std::optional<value_type> return_value_;
134template <
typename Func>
138 : func_(std::forward<Func>(func)) {}
157template <
typename Func>
158RunOnceTask(Func&&) -> RunOnceTask<Func>;
Definition: func_task.h:32
Poll DoPend(Context &cx) override
Definition: func_task.h:46
constexpr FuncTask(Func &&func)
Creates a new Task that delegates Pend to func.
Definition: func_task.h:35
Poll DoPend(Context &) override
Definition: func_task.h:149
Definition: func_task.h:76
constexpr RunOnceTask(Func &&func)
Creates a new Task that runs the provided function once.
Definition: func_task.h:85
Poll DoPend(Context &) override
Definition: func_task.h:115
std::conditional_t< std::is_void_v< std::invoke_result_t< Func > >, ReadyType, std::invoke_result_t< Func > > value_type
The return value of the function.
Definition: func_task.h:82
value_type & value()
Definition: func_task.h:103
const value_type & value() const
Definition: func_task.h:106
bool has_value() const
Definition: func_task.h:98
value_type & Wait()
Blocks until the task completes and returns a reference its return value.
Definition: func_task.h:109
constexpr Poll Ready()
Returns a value indicating completion.
Definition: poll.h:337
ReturnValuePolicy
Whether to store or discard the function's return value in RunOnceTask.
Definition: func_task.h:55