10 template <
class F,
class P>
13 WorkTaskImpl(F f, P p, std::shared_ptr<std::atomic<bool>> canceled_)
14 : canceled(
std::move(canceled_)),
16 params(
std::move(p)) {
21 std::lock_guard<std::recursive_mutex> lock(mutex);
23 invoke(std::make_index_sequence<std::tuple_size_v<P>>{});
36 std::lock_guard<std::recursive_mutex> lock(mutex);
41 template <std::size_t... I>
42 void invoke(std::index_sequence<I...>) {
43 func(std::move(std::get<I>(std::forward<P>(params)))...);
46 std::recursive_mutex mutex;
47 std::shared_ptr<std::atomic<bool>> canceled;
53 template <
class Fn,
class... Args>
55 auto flag = std::make_shared<std::atomic<bool>>();
58 auto tuple = std::make_tuple(std::forward<Args>(args)...);
59 return std::make_shared<WorkTaskImpl<std::decay_t<Fn>, decltype(tuple)>>(
WorkTaskImpl(F f, P p, std::shared_ptr< std::atomic< bool >> canceled_)
void operator()() override
static std::shared_ptr< WorkTask > make(Fn &&, Args &&...)