我对一个超出正常限制的可观察流有一些特殊需要/要求,我不完全确定如何做到这一点:
基本上我有一个可观察的流,最初来自一个正常的事件,如下所示:
var someEventObservable = Observable.FromEventPattern<SomeEventHandler, SomeEventArgs>(
handler => this.ColumnWidthChanged += handler,
handler => this.ColumnWidthChanged -= handler)
.Select(_ => Unit.Default);
现在,由于这些事件可以快速连续发生,我只需要知道它是否在给定的时间范围内至少发生一次,我通常会使用 .Throttle(),即像这样:
var someThrottledEventObservable = someEventObservable
.Throttle(TimeSpan.FromMilliseconds(300));
但是我的实际要求更进一步:如果在该限制 TimeSpan / dueTime 内引发了一个事件,并且如果在第一个事件之后引发了另一个事件但仍在该到期时间之内,我希望受限制的流再次从 0 等待时间重新开始再等待 300 毫秒……如果引发了另一个事件,请再次重新开始/延长该时间……依此类推。只有在原始或重新启动的 TimeSpan(s)/dueTime 内没有引发其他事件时,才someThrottledEventObservable
应该产生一个新的 Unit 实例。
我希望这是有道理的 - 但基本上我想要/需要一个受限制的事件流,只要源流在给定时间内停止产生新事件并且如果在该等待时间内发生新事件,受限制的流应该重新启动等待。
或者:在持续的事件“风暴”中,仅 .Throttle() 就会每 300 毫秒产生一个新单元(在上面的示例中),但是每当一个或多个事件被触发但在 300 毫秒内没有发生新事件时,我都想要一个新单元之后的冷却期。
我该怎么做?