【问题标题】:Remove item from Replay Observable从 Replay Observable 中移除项目
【发布时间】:2013-08-15 08:30:08
【问题描述】:

假设您有一个可观察的回放,通过Replay overloads 之一创建。 是否存在Replay 的变体,它使用一种方法生成可观察到的重播,让我可以从重播缓冲区中删除项目/消息/元素?

我需要 replay observable 以避免竞争条件:两个 observable AB 产生相关消息。如果A 生成消息m,则B 可能会跟随相应消息m'(但这是可选的)。
为了从B 的所有消息中过滤掉m'A 的订阅者向B 注册订阅者(针对确切的m' 消息进行过滤),因为仅当接收到m该程序是否能够预测可能传入的m' 的外观。

但是,有时m' 甚至在A 的订阅者计划运行之前就已到达,这意味着尚未注册m' 的订阅者。我可以通过将 B 包装为重播 observable 来解决这个问题,但我希望能够从重播缓冲区中清理已处理的消息,因为我知道 B 的每条消息都将由一个订阅者处理。

【问题讨论】:

    标签: buffer system.reactive replay


    【解决方案1】:
    var result = foo.Replay().Where(x => x != skip);
    

    【讨论】:

    • 我认为这不会解决我的问题:我原来的 observable 正在进行中,这意味着它周围的第一个 replay-wrapper 不会被处理,直到它的所有订阅者都消失了。因此,如果我继续添加过滤后的重放包装层,内层将永远累积。
    • 其实,只是重新阅读你的问题。您是否考虑过使用IObservable.Zip()
    • 我考虑过,然后放弃了这个想法 :) 为了让Zip 工作,我需要始终拥有一个m'(每个m)。但m' 是可选的
    • 当你说可选时,消费者是否知道它是否可选?因为m' 订阅可能会在不需要时返回一个空的m'...或者甚至使用不同的观察者/订阅者对,然后再次加入它们...
    • 传入的m 只允许预测如何识别/过滤出相应的m',如果一个到达。它不能用来预测它是否
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多