我最近正在学习和阅读有关Flow和Kotlin Coroutines的很多文章。但是我仍然感到困惑,何时应使用Flow
和何时应使用Channel
。
一开始看起来比较简单。使用热数据流? Channel
。冷的? Flows
。如果您需要从多个地方监听数据流,情况也是这样,如果是这种情况,则选择Channel
。仍然有很多示例和问题。
但是最近引入了FlowChannels
,以及大量鼓励使用Flow
的方法和类,以及将Channels
转换为Flows
的工具,依此类推。随着Kotlin发行版中所有这些新内容和新内容的出现,我开始变得越来越困惑。所以问题是:
我什么时候应该使用Channel,什么时候应该使用Flow?
希望SO社区能够对此清除思路!
非常感谢!
对于迄今为止最好的工具是Channel
的许多使用案例,Flow
已成为新的最佳工具。
作为一个具体示例,callbackFlow
现在是从第三方API的回调中接收数据的最佳方法。这在GUI设置中特别有效。它将回调,通道和相关的接收协程耦合在一起,它们都在同一个独立的Flow
实例中。仅在收集流时才注册回调。取消流程会自动传播到关闭通道并注销回调。您只需要提供一次回调注销代码。
您应该将Channel
视为Flow
在其实现中使用的较低级原语。仅在意识到Flow
不符合您的要求后,才考虑直接使用它。