我想知道是否有任何解决方案可以在消耗完通道元素之后重用它们。例如,通过渠道刺激2次。
我已经尝试过了:
fun main() = runBlocking {
//sampleStart
val channel = Channel<String>(2)
println(channel.isEmpty) // true
channel.send("foo")
channel.send("bar")
channel.close()
println(channel.isEmpty) // false
for (it in channel) println(it) // foo, bar
println(channel.isEmpty) // false!!!
for (it in channel) println("item: $it")
}
这里奇怪的是,channel.isEmpty
在消耗完所有值之后返回false
。
答案 0 :(得分:0)
您的答案位于ReceiveChannel#isEmpty
的文档中:
如果通道为空(不包含任何元素),则返回true,并且接收尝试将暂停。对于isClosedForReceive通道,此函数返回false。