【问题标题】:what is the alternative in coroutines for `share()` of `RxJava`?`RxJava`的`share()`的协程中的替代方案是什么?
【发布时间】:2019-02-27 10:01:51
【问题描述】:

我有一个配置文件,我正在获取它,结果获取标题和查询列表:字符串 并根据查询我应该实现不同的请求 我的意思是我有配置的 request1 并根据request1的结果,我应该将它与request2、request3……结合起来。 这些组合我想要平行 我知道我可以通过 RxJava 使用 share() 来实现这一点,但是我如何使用 Coroutines 来做到这一点?

【问题讨论】:

    标签: android rx-java2 kotlinx.coroutines


    【解决方案1】:

    以非协程的方式考虑它,如果函数不是挂起而只是常规函数,你会怎么做?

    您可以将发出的值存储在变量中并检查是否已缓存它,如果已缓存,则可以返回值,否则,计算这些值。

    如果你有一些高级逻辑需要倾听(比如 RxJava 的 Subjects),你可以使用 Kotlin Coroutines Channels。

    要创建频道,您可以使用Channel()ConflatedBroadCastChannel() 或其他变体。如果您希望您的频道与 RxJava 的 PublishSubject 完全一样,您可以使用 ConflatedBroadCastChannel:

    val broadCastChannel = ConflatedBroadcastChannel<Int>()
    

    您可以使用broadCastChannel.offer(value) 向频道发送值。

    要从通道接收值,您可以使用简单的 for-each 循环:

    for (i in broadCastChannel.openSubscription()) {
           //your values
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-08
      • 2021-07-31
      • 2021-11-13
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      相关资源
      最近更新 更多