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 :)
编辑:按照下面的建议,我换Do到Subscribe,但我还没有得到任何结果,如果我使用Throttle.我应该使用它吗?
yam*_*men 13
我认为这是过度设计,你只需要使用Sample它,它完全符合你的要求:
source.Sample(TimeSpan.FromSeconds(60)).Subscribe(x => /* .. */);
Run Code Online (Sandbox Code Playgroud)
做这个:
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)