【问题标题】:Is there a Rx Framework function which will create an observable which ends after a timespan has elapsed?是否有一个 Rx 框架函数将创建一个在时间跨度过去后结束的 observable?
【发布时间】:2011-09-23 18:33:59
【问题描述】:

有些 observables 实在是太需要了。他们希望你听,听,听他们要说的一切,也许永远!如果我真的只能处理几秒钟的事件怎么办?我可以写类似的东西

mouseMoves.TakeFor(TimeSpan.FromSeconds(2))

从概念上讲,这将创建一个主题,该主题将传递事件直到某个时间过去,然后取消订阅底层可观察对象并将其自己的序列标记为完成。我怀疑您可以手动编写它,但似乎必须有一些现有的运营商这样做。我曾希望Observable.TimeOut 会做我想做的事,例如使用

mouseMoves.Timeout(TimeSpan.FromSeconds(2), Observable.Empty<T>())

但我认为如果时间跨度 between 观察值比给定值长,它正在做的是超时观察。这也很有用,但不是我想要的。

【问题讨论】:

    标签: system.reactive reactive-programming


    【解决方案1】:

    听起来你需要TakeUntil

    var source = Observable.FromEventPattern(...);
    
    source.TakeUntil(Observable.Timer(TimeSpan.FromSeconds(2))
       .Subscribe(_ => {});
    

    【讨论】:

    • 我们必须使用不同版本的框架? Observable.Timeout 没有只接受一个参数的重载。但大概有一个可观察的工厂,它制造了一个在经过一段时间后只发出一次尖叫声的可观察对象。时间不早了,我该睡觉了,但我会在早上寻找这样的东西。
    • 抱歉,Observable.Timer 是我的意思。 TakeUntil 是你需要的;它从源中读取,直到发出另一个序列(在本例中为 Timer)的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    相关资源
    最近更新 更多