While one handler is suspended, the worker runs another

Handler A releases the thread at co_await, the worker finishes B, and A resumes when the reply arrives

While one handler is suspended, the worker runs another Handler A releases the thread at co_await, the worker finishes B, and A resumes when the reply arrives handle() runs co_await request(...).async() → suspend, thread released the worker moves on at once — handle() runs co_return (done) reply arrives → resume co_return (done) worker thread · Sequence participant worker thread handler A · coroutine · Sequence participant handler A coroutine Play channel · Sequence participant Play channel handler B · coroutine · Sequence participant handler B coroutine

Suspending stops only that flow

  • • When handler A suspends at co_await, only that flow stops; the thread returns to the pool and nothing is held.
  • • The worker picks up the next item and runs B, which finishes before A's reply arrives.

Blocking undoes this

  • • When the reply lands, A resumes in place and co_returns — which is how a handful of workers absorb many concurrent requests.
  • • A blocking wait inside a handler pins its thread for the duration, so it is not allowed.