【发布时间】:2019-02-07 22:30:39
【问题描述】:
我下面有 kotlin 协程代码。
import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*
fun main() = runBlocking <Unit> {
val channel = Channel<Int>(4)
val sender = launch (coroutineContext) {
repeat(10) {
println("sending $it")
channel.send(it)
delay(100)
}
}
delay(1000)
//launch { for (y in channel) println("receiving $y") }
for (y in channel) println("receiving $y")
}
它工作正常。如果我将逻辑从通道接收元素放入另一个协程(即,将for 放入launch 中,如注释代码中所示),那么它会在输出下方被击中(即,我希望发送和接收到 10 点,但是它卡在receiving 3)。
sending 0
sending 1
sending 2
sending 3
sending 4
receiving 0
receiving 1
receiving 2
receiving 3
如何在另一个协程中接收元素而不会出现任何故障?
我正在使用版本compile("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1")
【问题讨论】:
-
如果“另一个协程”是指带有
launch的注释行,我可以分享它在我的机器上正常工作。 Kotlin 1.3.21,协程核心 1.1.1。 -
@MarkoTopolnik - 我已经更新了这个问题。如果它没有意义,请阅读并告诉我。
-
好的,所以你确认你的意思是我的理解。它在这里工作。