相对于普通的channel
@Test
fun `test broadcast`() = runBlocking<Unit> {
val broadcastChannel = BroadcastChannel<Int>(Channel.BUFFERED)
GlobalScope.launch {
List(3) {
delay(100)
broadcastChannel.send(it)
}
broadcastChannel.close()
}
List(3) { index ->
GlobalScope.launch {
val receiveChannel = broadcastChannel.openSubscription()
for (i in receiveChannel) {
println("[#$index] received :$i")
}
}
}.joinAll()
}
他可以。。一对多
上述代码中
也可以进行转换 从channel到broadCashChannel
val channel = Channel<Int>()
val broadcastChannel = channel.broadcast(3)
结果和上面是一样的。
请注意
这个地方不能用很大。和0 否则会报错