When batching_delay_ms > 0, the collect deadline anchors to the first job's enqueue time. Any job that waited behind an in-flight generation arrives with an already-expired deadline and was dispatched as a batch of 1, degrading dynamic batching to sequential under sustained load. Fall through to the same non-blocking greedy drain the delay=0 path uses so queued compatible jobs still coalesce up to batching_max_size.