diff --git a/tasks/task_manager.hh b/tasks/task_manager.hh index 8f0c8ab4df..e651c61c9d 100644 --- a/tasks/task_manager.hh +++ b/tasks/task_manager.hh @@ -187,6 +187,19 @@ public: // If task has a parent, data concerning its children is updated and sequence number is inherited // from a parent and set. Otherwise, it must be set by caller. future make_task(task::task_impl_ptr task_impl_ptr, task_info parent_d = task_info{}); + + // Must be called on target shard. + template + requires std::is_base_of_v && + requires (module_ptr module, Args&&... args) { + {TaskImpl(module, std::forward(args)...)} -> std::same_as; + } + future make_and_start_task(tasks::task_info parent_info, Args&&... args) { + auto task_impl_ptr = std::make_unique(shared_from_this(), std::forward(args)...); + auto task = co_await make_task(std::move(task_impl_ptr), parent_info); + task->start(); + co_return task; + } }; public: task_manager(config cfg, abort_source& as) noexcept;