| 33 | |
| 34 | template <class FUNCTION> |
| 35 | Status ParallelFor(int num_tasks, FUNCTION&& func, |
| 36 | Executor* executor = internal::GetCpuThreadPool()) { |
| 37 | std::vector<Future<>> futures(num_tasks); |
| 38 | |
| 39 | for (int i = 0; i < num_tasks; ++i) { |
| 40 | ARROW_ASSIGN_OR_RAISE(futures[i], executor->Submit(func, i)); |
| 41 | } |
| 42 | auto st = Status::OK(); |
| 43 | for (auto& fut : futures) { |
| 44 | st &= fut.status(); |
| 45 | } |
| 46 | return st; |
| 47 | } |
| 48 | |
| 49 | template <class FUNCTION, typename T, |
| 50 | typename R = typename internal::call_traits::return_type<FUNCTION>::ValueType> |