Skip to main content
Using the default options out-of-the-box, all events and handlers on a bus process in strict serial order to make execution order predictable and consistency easy. This is the default behavior because:
  • event_concurrency='bus-serial'
  • event_handler_concurrency='serial'
  • event_handler_completion='all'
On a single bus, that means event N+1 never starts before event N is complete, even if event N+1 handlers are “faster”. As you scale, you can tune these guarantees. See Concurrency Control in the sidebar for all modes and tradeoffs.

Variable handler runtimes still stay FIFO

Ambiguous case: slow then fast still runs serially

Even if you emit a slow event and then a fast event right after, the fast one does not overtake on the same bus under defaults.

Important exception: awaited child events

Inside a running handler, if you emit and await a child event, that child can queue-jump for RPC-style behavior. This is the intentional exception to plain FIFO queue order. See Immediate Execution (RPC-style) for exact behavior and mode interactions.