Вы можете создать два Channel
для ваших задач с высоким и низким приоритетом.Затем, чтобы получить события из каналов, используйте выражение сопрограммы ' select и поместите канал задачи с высоким приоритетом первым.
Пример (строка является четным):
fun process(value: String) {
// do what you want with the event
}
suspend fun selectFromHighAndLow(highPriorityChannel: ReceiveChannel<String>, lowPriorityChannel: ReceiveChannel<String>): String =
select<String> {
highPriorityChannel.onReceive { value ->
value
}
lowPriorityChannel.onReceive { value ->
value
}
}
val highPriorityChannel = Channel<String>()
val lowPriorityChannel = Channel<String>()
while (true) {
process(selectFromHighAndLow(highPriorityChannel, lowPriorityChannel))
}
Чтобы отправить материал на эти каналы, вы можете использовать channel.send(event)
.