【问题标题】:Creating a long running observable from shorter observables?从较短的可观察对象创建一个长期运行的可观察对象?
【发布时间】:2016-01-14 15:36:07
【问题描述】:

我有一个方法可以返回一个返回 1 或 2 个项目的短 observable,然后完成。

我想要一个持续运行的 observable,当我调用一个方法时,短的 observable 被创建并合并到运行时间更长的 observable 中。

有没有办法使用可观察的运算符来做到这一点?还是应该只使用主题?

【问题讨论】:

  • 您可以在IObservable<IObservable<T>> 上调用.Merge(),其中内部IObservable<T> 是您的短期可观察对象。如果您需要更多详细信息,请提供一些代码以更好地解释您想要做什么。
  • @LucasTrzesniewski Merge 对我不起作用,因为一旦较短的可观察对象完成,较长的可观察对象也会完成,这是我不想要的。

标签: c# system.reactive


【解决方案1】:

当您提出问题时,无法绕过主题的使用,特别是因为您需要一个方法调用来触发现有流上的事件。

但是你可以将主题的使用限制到最低限度,也就是这个方法调用:

Subject<Unit> trigger;

void RefreshMethod() { trigger.OnNext(Unit.Default); }

IObservable<Item> GetLongObservable() {
    return trigger.SelectMany(_ => GetShortObservable());
}

理想情况下,根据调用 RefreshMethod 的位置,您可以尝试进一步推广 Rx 的使用,并将主题替换为它背后的实际 事件

【讨论】:

  • 谢谢。我认为没有办法使用一个主题,但只是想确定一下。我的封装正是你所拥有的——一个带有GetObservableRefresh 方法的类。不过我不明白你最后一句是什么意思。
  • 我的意思是可能有一些事件调用了刷新方法(例如按钮单击?),如果这个事件被转换为可观察的,它会替换主题,例如:@987654327 @但可能不适用于您的情况?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
相关资源
最近更新 更多