我已经使用协程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。我该如何为队列中的项目添加优先级?