6#include <userver/engine/deadline.hpp>
7#include <userver/engine/impl/task_context_factory.hpp>
8#include <userver/engine/task/shared_task_with_result.hpp>
9#include <userver/engine/task/task_processor_fwd.hpp>
10#include <userver/engine/task/task_with_result.hpp>
11#include <userver/utils/impl/wrapped_call.hpp>
13USERVER_NAMESPACE_BEGIN
19template <
template <
typename>
typename TaskType,
typename Function,
typename... Args>
20[[nodiscard]]
auto MakeTaskWithResult(
21 TaskProcessor& task_processor,
27 using ResultType =
typename utils::
impl::WrappedCallImplType<Function, Args...>::ResultType;
28 constexpr auto kWaitMode = TaskType<ResultType>::kWaitMode;
30 return TaskType<ResultType>{MakeTask(
31 {task_processor, importance, kWaitMode, deadline},
32 std::forward<Function>(f),
33 std::forward<Args>(args)...
60template <
typename Function,
typename... Args>
61[[nodiscard]]
auto AsyncNoSpan(TaskProcessor& task_processor, Function&& f, Args&&... args) {
66 std::forward<Function>(f),
67 std::forward<Args>(args)...
72template <
typename Function,
typename... Args>
73[[nodiscard]]
auto SharedAsyncNoSpan(TaskProcessor& task_processor, Function&& f, Args&&... args) {
74 return impl::MakeTaskWithResult<SharedTaskWithResult>(
78 std::forward<Function>(f),
79 std::forward<Args>(args)...
84template <
typename Function,
typename... Args>
85[[nodiscard]]
auto AsyncNoSpan(TaskProcessor& task_processor, Deadline deadline, Function&& f, Args&&... args) {
90 std::forward<Function>(f),
91 std::forward<Args>(args)...
96template <
typename Function,
typename... Args>
97[[nodiscard]]
auto SharedAsyncNoSpan(TaskProcessor& task_processor, Deadline deadline, Function&& f, Args&&... args) {
98 return impl::MakeTaskWithResult<SharedTaskWithResult>(
102 std::forward<Function>(f),
103 std::forward<Args>(args)...
108template <
typename Function,
typename... Args>
109[[nodiscard]]
auto AsyncNoSpan(Function&& f, Args&&... args) {
114template <
typename Function,
typename... Args>
115[[nodiscard]]
auto SharedAsyncNoSpan(Function&& f, Args&&... args) {
120template <
typename Function,
typename... Args>
121[[nodiscard]]
auto AsyncNoSpan(Deadline deadline, Function&& f, Args&&... args) {
125 std::forward<Function>(f),
126 std::forward<Args>(args)...
131template <
typename Function,
typename... Args>
132[[nodiscard]]
auto SharedAsyncNoSpan(Deadline deadline, Function&& f, Args&&... args) {
133 return SharedAsyncNoSpan(
136 std::forward<Function>(f),
137 std::forward<Args>(args)...
143template <
typename Function,
typename... Args>
144[[nodiscard]]
auto CriticalAsyncNoSpan(TaskProcessor& task_processor, Function&& f, Args&&... args) {
149 std::forward<Function>(f),
150 std::forward<Args>(args)...
156template <
typename Function,
typename... Args>
157[[nodiscard]]
auto SharedCriticalAsyncNoSpan(TaskProcessor& task_processor, Function&& f, Args&&... args) {
158 return impl::MakeTaskWithResult<SharedTaskWithResult>(
162 std::forward<Function>(f),
163 std::forward<Args>(args)...
169template <
typename Function,
typename... Args>
170[[nodiscard]]
auto CriticalAsyncNoSpan(Function&& f, Args&&... args) {
171 return CriticalAsyncNoSpan(
173 std::forward<Function>(f),
174 std::forward<Args>(args)...
180template <
typename Function,
typename... Args>
181[[nodiscard]]
auto SharedCriticalAsyncNoSpan(Function&& f, Args&&... args) {
182 return SharedCriticalAsyncNoSpan(
184 std::forward<Function>(f),
185 std::forward<Args>(args)...
191template <
typename Function,
typename... Args>
192[[nodiscard]]
auto CriticalAsyncNoSpan(Deadline deadline, Function&& f, Args&&... args) {
197 std::forward<Function>(f),
198 std::forward<Args>(args)...