Следующий код печатает только 10000, то есть только последний элемент
val channel = BroadcastChannel<Int>(Channel.CONFLATED)
val flowJob = channel.asFlow().buffer(Channel.UNLIMITED).onEach {
println(it)
}.launchIn(GlobalScope)
for (i in 0..100) {
channel.offer(i*i)
}
flowJob.join()
Код можно запустить на игровой площадке.
Но поскольку поток запускается в отдельном потоке диспетчеризации, а значение отправляется в канал, и поскольку поток имеет неограниченный буфер, он должен получать каждый элемент до тех пор, пока не будет вызван onEach. Но почему может быть получен только последний элемент?
Это ожидаемое поведение или ошибка? Если это ожидаемое поведение, как кто-то попытается протолкнуть в поток только самые новые элементы, но весь поток, имеющий определенный буфер, может получить элемент.