我有一个流程:
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上的asFlow或BroadcastChannel)。
但是Kotlin团队目前正在开发一种名为 StateFlow
的东西,这在某种程度上意在实现类似的行为,尽管尚不清楚何时准备就绪。
编辑: StateFlow
和 SharedFlow
已作为稳定API(https://blog.jetbrains.com/kotlin/2020/10/kotlinx-coroutines-1-4-0-introducing-stateflow-and-sharedflow/)的一部分发布。当在异步执行上下文中需要状态管理时,可以并且应该使用这些工具。