Stream builds across the pool with backpressure (at most size in flight — each worker pulls the
next index only when its previous chunk returns), invoking onResult(index, response) as each
completes. Memory-friendly: the caller uploads + drops each response immediately, so peak transient
geometry is bounded by size (not the whole batch). Rejects on the first worker error; resolves
when every request has been delivered (or the pool was disposed mid-run).
Build every request and return responses in input order. Convenience over buildStreaming for callers that want the whole batch (holds all responses — not memory-bounded; the renderer uses the streaming form). A
nullslot means the build was skipped (disposed mid-run).