У меня есть класс, который слушает события, поступающие из сокета, в очень быстром темпе. Я хотел бы скормить эти события в сопрограмму Channel
. Используется следующий код:
class MyClass(channel: Channel<String>) : ... {
...
override onMessageReceived(message: String) {
MyScope.launch {
channel.send(message)
}
}
}
Это не работает, так как иногда события приходят так быстро, что они заканчиваются тем, что публикуются не по порядку из-за того, что launch
порождает новую сопрограмму и все происходит впараллельно. Как я могу убедиться, что порядок send
является синхронным?
Я пробовал newSingleThreadContext
, который сработал, однако он считается экспериментальным и имеет примечание о том, что он будет удален в конце концов. Я ищу более правильное и полное решение.