Kotlin协程优先SendChannel实施

时间:2020-04-16 17:19:04

标签: kotlin kotlin-coroutines

我已经使用协程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)
            }
        }

有一个类似的问题here,但我不确定如何将其应用于Actor + SendChannel。我该如何为队列中的项目添加优先级?

0 个答案:

没有答案