broadcastThrough

basic (with chunks)

Stream('a', 'b', 'c')
  .chunkLimit(1)
  .unchunks
  .evalTap(x => IO.raiseWhen(x == 'b')(Err))
  .broadcastThrough(in => in.metered(1.second))
  .compile
  .toList

diagram

error propagation (with chunks)

Stream('a', 'b', 'c')
  .chunkLimit(1)
  .unchunks
  .evalTap(x => IO.raiseWhen(x == 'b')(Err))
  .broadcastThrough(in => in.metered(1.second))
  .compile
  .toList

diagram

different rates (with chunks)

Stream('a', 'b', 'c')
  .chunkLimit(1)
  .unchunks
  .broadcastThrough(in => in.metered(1.second), in => in.metered(100.second))
  .compile
  .toList

diagram