From 824f64845c27f4b305430fc1049339af32561960 Mon Sep 17 00:00:00 2001 From: Nic Crane Date: Mon, 13 Jul 2026 08:09:05 +0000 Subject: [PATCH] Delay parallel tasks --- r/src/RTasks.cpp | 8 ++++++-- r/src/r_task_group.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/r/src/RTasks.cpp b/r/src/RTasks.cpp index 5d3a749b6d34..09c5dd630f8e 100644 --- a/r/src/RTasks.cpp +++ b/r/src/RTasks.cpp @@ -40,8 +40,11 @@ Status RTasks::Finish() { } } - // then wait for the parallel tasks to finish + // submit the delayed parallel tasks and wait for them to finish if (use_threads_) { + for (auto& task : delayed_parallel_tasks_) { + parallel_tasks_->Append(std::move(task)); + } status &= parallel_tasks_->Finish(); } @@ -50,7 +53,7 @@ Status RTasks::Finish() { void RTasks::Append(bool parallel, RTasks::Task&& task) { if (parallel && use_threads_) { - parallel_tasks_->Append(std::move(task)); + delayed_parallel_tasks_.push_back(std::move(task)); } else { delayed_serial_tasks_.push_back(std::move(task)); } @@ -58,6 +61,7 @@ void RTasks::Append(bool parallel, RTasks::Task&& task) { void RTasks::Reset() { delayed_serial_tasks_.clear(); + delayed_parallel_tasks_.clear(); stop_source_.Reset(); if (use_threads_) { diff --git a/r/src/r_task_group.h b/r/src/r_task_group.h index e1c298b27fc3..43c040b9a7c8 100644 --- a/r/src/r_task_group.h +++ b/r/src/r_task_group.h @@ -45,6 +45,7 @@ class RTasks { StopSource stop_source_; std::shared_ptr parallel_tasks_; std::vector delayed_serial_tasks_; + std::vector delayed_parallel_tasks_; }; } // namespace r