43 void ForEach(InputIter begin, InputIter end, F
f) {
44 std::vector<std::future<void>> futures;
45 for (
auto iter = begin; iter != end; ++iter) {
47 futures.emplace_back(this->
Post([&] {
f(elem); }));
49 for (
auto& future : futures) {
53 AERROR <<
"Future is invalid.";
59 std::future<
typename std::result_of<FuncType()>::type>
Post(FuncType&& func) {
60 typedef typename std::result_of<FuncType()>::type ReturnType;
61 typedef typename std::packaged_task<ReturnType()> TaskType;
65 std::shared_ptr<TaskType> task =
66 std::make_shared<TaskType>(std::move(func));
67 std::future<ReturnType> returned_future = task->get_future();
71 return std::future<ReturnType>();
73 task_queue_.
Enqueue([task]() { (*task)(); });
74 return returned_future;