Kotlin Реализация SendChannel с приоритетом сопрограммы - PullRequest
0 голосов
/ 16 апреля 2020

Я реализовал базовую 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 добавил приоритет к элементам в очереди?

...