Я ниже кода сопрограммы 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")