使用Rx,每隔60秒进行一次最后一次触发事件

Iga*_*nik 5 c# events system.reactive

我有一个事件(可能)每秒触发一次(计时器滴答).我想做的是EventArgs每60秒采取最后一个滴答值(如果在这60秒内有新的滴答).我尝试过这样的事情:

Observable.FromEventPattern(
    h => myThing.SomeEvent += h,
    h => myThing.SomeEvent -= h)
        .Throttle(TimeSpan.FromSeconds(60))
        .TakeLast(1)
        .Do(p => // do something with p);
Run Code Online (Sandbox Code Playgroud)

不幸的是我从来没有采用这种Do方法,而且我不确定我做错了什么?

抱歉,如果这是完全错误的,我第一次使用Rx :)

编辑:按照下面的建议,我换DoSubscribe,但我还没有得到任何结果,如果我使用Throttle.我应该使用它吗?

yam*_*men 13

我认为这是过度设计,你只需要使用Sample它,它完全符合你的要求:

source.Sample(TimeSpan.FromSeconds(60)).Subscribe(x => /* .. */);
Run Code Online (Sandbox Code Playgroud)


Ana*_*tts 7

做这个:

Observable.FromEventPattern(h => myThing.SomeEvent += h, h => myThing.SomeEvent -= h)
    .Window(TimeSpan.FromSeconds(60))
    .SelectMany(x => x.TakeLast())
    .Subscribe(x => /* ... */);
Run Code Online (Sandbox Code Playgroud)