kotlin流上有条件的' collectLatest '或' collect '行为



我有以下问题:有两种类型的事件:

enum class Event {
REGULAR,
URGENT
}

这些事件被发送到val eventsFlow = SharedFlow<Event>(或通道),然后由收集器处理:

scope.launch {
eventsFlow.collect { event ->
delay(100) //process event (same logic)
}
}

我想要达到的目标:

  • REGULAR事件不应取消处理(如果新的' REGULAR '事件到达并且收集器正忙,则不应取消处理,就像标准collect一样)
  • 但是如果URGENT事件到达,它应该取消当前事件的处理(像collectLatest一样)

所以我需要想出一些解决方案,试图玩弄flatMapLatest和其他操作符,但没有运气

scope.launch {
var job: Job? = null
eventsFlow.collect { event ->
when (event) {
Event.URGENT -> job?.cancelAndJoin()
Event.REGULAR -> job?.join()
}
job = launch {
delay(100) //process event (same logic)
}
}
}

相关内容

  • 没有找到相关文章

最新更新