我正在尝试使用 kotlin 协程创建一个轮询机制,sharedFlow
并希望在没有订阅者时停止并在至少有一个订阅者时激活。我的问题是,sharedFlow
在这种情况下是正确的选择还是应该使用channel
. 我尝试使用channelFlow
,但我不知道如何关闭cancel
块体外部的通道(不是工作)。有人可以帮忙吗?这是片段。
fun poll(id: String) = channelFlow {
while (!isClosedForSend) {
try {
send(repository.getDetails(id))
delay(MIN_REFRESH_TIME_MS)
} catch (throwable: Throwable) {
Timber.e("error -> ${throwable.message}")
}
invokeOnClose { Timber.e("channel flow closed.") }
}
}