diff --git a/src/mind/unconscious.rs b/src/mind/unconscious.rs index fdcfaed..009e80f 100644 --- a/src/mind/unconscious.rs +++ b/src/mind/unconscious.rs @@ -187,17 +187,14 @@ impl Unconscious { } let running = self.agents.iter().filter(|a| a.is_running()).count(); - if running >= self.max_concurrent { return; } - let slots = self.max_concurrent - running; - - let ready: Vec = self.agents.iter().enumerate() - .filter(|(_, a)| a.should_run()) - .map(|(i, _)| i) - .take(slots) - .collect(); - - for idx in ready { - self.spawn_agent(idx).await; + for _ in running..self.max_concurrent { + let next = self.agents.iter().enumerate() + .filter(|(_, a)| a.should_run()) + .min_by_key(|(_, a)| a.last_run); + match next { + Some((idx, _)) => self.spawn_agent(idx).await, + None => break, + } } }