一些可观察对象就是如此需要。他们想要你听,听,听他们说的一切,也许是所有的时间!如果我真的只能处理几秒钟的事件呢?我可以写像
这样的东西吗?mouseMoves.TakeFor(TimeSpan.FromSeconds(2))
从概念上讲,这将创建一个主题,该主题将沿着事件传递直到特定时间过去,然后取消订阅底层可观察对象并标记自己的序列完成。我怀疑你可以这样手写,但似乎一定有一些现有的运算符可以做到这一点。我希望Observable.TimeOut
会做我想要的,例如使用
mouseMoves.Timeout(TimeSpan.FromSeconds(2), Observable.Empty<T>())
但我认为它所做的是,如果观测之间的时间跨度长于给定值,则将可观测值计时。这也很有用,但不是我想要的。
听起来你需要TakeUntil
:
var source = Observable.FromEventPattern(...);
source.TakeUntil(Observable.Timer(TimeSpan.FromSeconds(2))
.Subscribe(_ => {});