我有一个流程:

val myflow = kotlinx.coroutines.flow.flow<Message>{}

并希望使用以下函数发出值:

override suspend fun sendMessage(chat: Chat, message: Message) {
    myflow.emit(message)
}

但是编译器不允许我这样做,是否有任何解决方法来解决此问题?

最佳答案

The answer of Animesh Sahu非常正确。您还可以将Channel作为流返回(请参阅consumeAsFlow上的asFlowBroadcastChannel)。
但是Kotlin团队目前正在开发一种名为 StateFlow 的东西,这在某种程度上意在实现类似的行为,尽管尚不清楚何时准备就绪。
编辑: StateFlow SharedFlow 已作为稳定API(https://blog.jetbrains.com/kotlin/2020/10/kotlinx-coroutines-1-4-0-introducing-stateflow-and-sharedflow/)的一部分发布。当在异步执行上下文中需要状态管理时,可以并且应该使用这些工具。

10-08 12:40