以下代码仅打印 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()
代码可以在操场上运行。
但是由于 Flow 在单独的调度线程中启动,并且值被发送到 Channel 并且由于 Flow 具有无限的缓冲区,所以它应该接收每个元素直到调用 onEach。但是为什么只有最后一个元素能够被接收?
这是预期的行为还是一些错误?如果它的预期行为有人会尝试仅将最新元素推送到流中,但所有具有特定缓冲区的流都可以接收该元素。