gpt4 book ai didi

Kotlin Coroutine - 保持 channel 发送事件同步

转载 作者:行者123 更新时间:2023-12-02 12:46:30 24 4
gpt4 key购买 nike

我有一个类以非常快的速度监听来自套接字的事件。我想将这些事件提供给协程 Channel。使用以下代码:

class MyClass(channel: Channel<String>) : ... {

...

override onMessageReceived(message: String) {
MyScope.launch {
channel.send(message)
}
}

}

这是行不通的,因为有时事件发生得如此之快,以至于由于 launch 产生了一个新的协程并且所有事情都是并行发生的,它们最终会乱序发布。如何确保发送的顺序是同步的?

我试过 newSingleThreadContext 确实有效,但它被认为是实验性的,并且有一条注释说它最终会被删除。我正在寻找更正确和更完整的更多解决方案。

最佳答案

您应该使用容量为 Channel.UNLIMITED 的 Channel,而不是并行启动 send,并使用 onMessageReceived offer 而不是 send

这比每次发送都启动一个新作业便宜很多,而且 channel 会保留顺序

关于Kotlin Coroutine - 保持 channel 发送事件同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58514019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com