reconsider

Asks the dispatcher to look at the board again.

The dispatcher is woken by the two things that ordinarily change a decision from inside this subsystem: a task being posted, and a vehicle declaring itself available. Between them they cover the working fleet, because a vehicle that moves — finishing a task, finishing a disposition — re-declares when it stops, so anything that alters what a vehicle can reach already causes a fresh pass.

They do not cover a vehicle that stops. One that breaks down or runs flat keeps its assignment, declares nothing and posts nothing, so nothing here wakes and a task committed to a vehicle that will not reach it for an hour is not reconsidered. That costs nothing to a fleet whose rule would not take the task back anyway, and it costs a re-tasking policy the decision it exists to make. ReconsiderOnInterruption is the listener that closes it, and it is opt-in because waking on every breakdown changes the event sequence of every model that has them.

What they do not cover is a decision that changes for reasons outside the subsystem. A policy or a bidding rule is written by the modeller and may depend on anything in their model — a machine coming back up, a buffer draining, a flag an operator sets — and the dispatcher has no way to know when any of it changes. It must not go looking, either: a dispatcher that woke on a timer to re-ask a question whose answer had not changed would be polling, which in a discrete-event model is both wasteful and a sign that a state change has gone unmodelled.

So the model says so, by calling this at the event where the change actually happens — which is an event the model already has.

Safe to call at any time, including while the dispatcher is mid-pass — the wake is remembered rather than lost. Calling it when nothing has changed costs one dispatching pass that assigns nothing.