pub async fn recv(&mut self, stop_timer: &mut Option<Timer>) -> Option<ControlMessage> {
		if stop_timer.as_ref().map_or(false, Timer::is_past) {
			return stop_timer.take().map(|timer| timer.to_control());
		}

		if let Ok(message) = self.urgent.try_recv() {
			return Some(message);
		}

		if let Ok(message) = self.high.try_recv() {
			return Some(message);
		}

		if let Some(timer) = stop_timer.clone() {
			select! {
				() = timer.to_sleep() => {
					*stop_timer = None;
					Some(timer.to_control())
				}
				message = self.urgent.recv() => message,
				message = self.high.recv() => message,
			}
		} else {
			select! {
				message = self.urgent.recv() => message,
				message = self.high.recv() => message,
				message = self.normal.recv() => message,
			}
		}
	}
Receive a control message from the command.

If `stop_timer` is `Some`, normal priority messages are not received; instead, only high and
urgent priority messages are received until the timer expires, and when the timer completes,
a `Stop` control message is returned and the `stop_timer` is `None`d.

This is used to implement stop's, restart's, and try-restart's graceful stopping logic.
crates/supervisor/src/job/priority.rs