Use the thread builder and handle the spawn error

This commit is contained in:
mo8it
2024-09-06 15:40:25 +02:00
parent 9faa5d3aa4
commit 2d26358602
4 changed files with 34 additions and 13 deletions
+9 -2
View File
@@ -388,13 +388,20 @@ impl AppState {
let handles = self
.exercises
.iter()
.map(|exercise| s.spawn(|| exercise.run_exercise(None, &self.cmd_runner)))
.map(|exercise| {
thread::Builder::new()
.spawn_scoped(s, || exercise.run_exercise(None, &self.cmd_runner))
})
.collect::<Vec<_>>();
for (exercise_ind, handle) in handles.into_iter().enumerate() {
for (exercise_ind, spawn_res) in handles.into_iter().enumerate() {
write!(stdout, "\rProgress: {exercise_ind}/{n_exercises}")?;
stdout.flush()?;
let Ok(handle) = spawn_res else {
return Ok(AllExercisesCheck::CheckedUntil(exercise_ind));
};
let Ok(success) = handle.join().unwrap() else {
return Ok(AllExercisesCheck::CheckedUntil(exercise_ind));
};