@Test
fun `test close channel`() = runBlocking<Unit> {
val channel = Channel<Int>(3)
//生产者
val producer = GlobalScope.launch {
List(3) {
channel.send(it)
println("send ${it}")
}
channel.close()
println("""close1.
| - CloseForSend isClosedForSend ${channel.isClosedForSend}
| - CloseForReceiver ${channel.isClosedForReceive}""".trimMargin())
}
val consumer = GlobalScope.launch {
for(element in channel){
println("receive $element")
delay(1000)
}
println("""close2.
| - CloseForSend isClosedForSend ${channel.isClosedForSend}
| - CloseForReceiver ${channel.isClosedForReceive}""".trimMargin())
}
joinAll(producer, consumer)
}
关闭不会被立即执行
要等到结束后才能完全关闭