Kotlin BroadcastChannel 一对多广播

相对于普通的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 否则会报错

猜你喜欢

转载自blog.csdn.net/mp624183768/article/details/126674929