有什么方法可以重用协程的通道值

时间:2019-08-19 12:37:20

标签: kotlin kotlin-coroutines

我想知道是否有任何解决方案可以在消耗完通道元素之后重用它们。例如,通过渠道刺激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

1 个答案:

答案 0 :(得分:0)

您的答案位于ReceiveChannel#isEmpty的文档中:

  

如果通道为空(不包含任何元素),则返回true,并且接收尝试将暂停。对于isClosedForReceive通道,此函数返回false。