我有以下问题:有两种类型的事件:
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)
}
}
}