Hello! I am reading the use of TaskScheduler inside C++ compute code (reading hash join) and have some questions about it, in particular:
(1) What the purpose of SchedulerTaskCallback defined here: https://github.com/apache/arrow/blob/5a5d92928ccd438edf7ced8eae449fad05a7e71f/cpp/src/arrow/compute/exec/hash_join_node.cc#L428 (My guess is that the caller of TaskScheduler::StartTaskGroup needs to provide an implementation of a task executor, and the implementation of SchedulerTaskCallback inside hash_join_node.cc is just a vanillar implementation) (2) When would this task context not have an executor? https://github.com/apache/arrow/blob/master/cpp/src/arrow/compute/exec/hash_join_node.cc#L581 (3) What's the difference between TaskImpl and TaskGroupContinuationImpl in TaskScheduler::RegisterTaskGroup? And how would one normally define TaskGroupContinuationImpl? Sorry I am still learning the Arrow compute internals and appreciate help on understanding these. Li