Я реализовал базовую c очередь, используя Coroutine Actor, SendChannel и CompletableDeferred для последовательной обработки команд. Это работает, как и ожидалось, но я хотел бы добавить приоритет к элементам в очереди (QueueItem), чтобы элементы с более высоким приоритетом обрабатывались перед элементами с более низким приоритетом.
Вот моя текущая реализация:
private suspend fun processItem(command: Command) {
val queueItem = QueueItem.Data(command)
channel.send(queueItem)
//response is a CompletableDeferred
queueItem.response.await()
}
val channel: SendChannel<QueueItemNew.Data> =
coroutineScope.actor(capacity = Channel.UNLIMITED) {
for (queueItem in channel) {
val result = process(queueItem.command)
queueItem.response.complete(result)
}
}
Есть похожий вопрос здесь , но я не уверен, как применить его к Actor + SendChannel. Как бы я go добавил приоритет к элементам в очереди?