mergeStreams, with a deliberately different lifetime contract —
pick by whether the source set is fixed:
mergeStreamsmerges a fixed set. Its result represents all of them: it ends when they have all ended (immediately, for an empty set) and one member’s error ends the whole merge.createStreamGroupowns a mutable set. It ends only viaclose()— zero members parks the consumer rather than ending it, so a set that is briefly empty mid-reconcile does not terminate the stream — and a member that fails is logged and dropped while its siblings keep running.
keys() stops reporting it, so
the caller’s next reconcile re-adds it through add.
Parameters
Returns
StreamGroup