У меня есть случай, когда я хочу построить ReceiveChannel
, используя produce
, асинхронно, но он зависает.Вот упрощенный пример:
runBlocking {
val deferredChannel = async {
produce<String> { send("foo") }
}
val channel = deferredChannel.await()
println("Got channel")
val value = channel.receive()
println("Got value $value")
}
Ни один println
не попадет.Вероятно, что происходит какой-то тупик сопрограммы, но я не совсем уверен, где и как.
Как я могу произвести ReceiveChannel
асинхронно?
Редактировать: Это работает, еслиЯ изменяю produce
на produce(capacity = 1)
, но почему это так?Разве await()
не должен быть успешным, по крайней мере, независимо от возможностей производителя?А что если я хочу сохранить емкость = 0?