25-通道的关闭与迭代
12.6.2 通道的关闭与迭代
与队列不同,通道可以关闭,表示不再处理更多进入通道的元素,同时在接收端,还可以使用for循环从通道接收元素。从概念上来讲,关闭操作就如同向通道发送的关闭令牌,当接收到这个关闭令牌时,迭代就停止操作,因此可以保证所有之前发送的元素都被接收到。
fun main(args: Array<String>) = runBlocking {
val channel = Channel<Int>()
launch {
for (x in 1..5) channel.send(x * x)
channel.close() //通道关闭
}
for (y in channel) println(y)
println("Done!")
}