kotlin协程管道Channel
import kotlinx.coroutines.*
import kotlinx.coroutines.channels.Channel
fun main(args: Array<String>) {
val channel = Channel<Int>()
runBlocking {
launch {
// 假设这里是耗时的生产者
for (i in 0..4) {
println("发送 $i")
channel.send(i)
println("发送 $i 完成")
println("---")
delay(100)
}
}
repeat(5) {
println("收到 ${channel.receive()}")
}
println("退出")
channel.close() // 关闭
}
}
输出:
发送 0
发送 0 完成
---
收到 0
发送 1
发送 1 完成
---
收到 1
发送 2
发送 2 完成
---
收到 2
发送 3
发送 3 完成
---
收到 3
发送 4
发送 4 完成
---
收到 4
退出
也可以用for循环代替repeat:
import kotlinx.coroutines.*
import kotlinx.coroutines.channels.Channel
fun main(args: Array<String>) {
val channel = Channel<Int>()
runBlocking {
launch {
// 假设这里是耗时的生产者
for (i in 0..4) {
println("发送 $i")
channel.send(i)
println("发送 $i 完成")
println("---")
delay(100)
}
}
for(j in channel) {
println("收到 ${j}")
}
println("退出")
channel.close() // 关闭
}
}
效果一样。