我正在尝试使用响应式扩展实现事件节流。
我的系统可能会为特定用户或其他实体类型高频率地引发事件。
我需要延迟一段特定的时间,然后在超时后使用最后一个值引发事件。
我的做法是这样的:
private Subject<int> userBalanceObservable = new Subject<int>();
userBalanceObservable.Sample(TimeSpan.FromSeconds(sampleSeconds))
.Subscribe(sample => OnRaiseBalanceEvent(sample));
当事件发生时
userBalanceObservable.OnNext(userId);
编辑
这种方法的问题在于事件是基于传递给OnNext的最后一个值引发的,而我实际上需要为每个传递给OnNext的值都设置延迟。
例如,OnNext(1),OnNext(2),OnNext(3)。我需要对1、2、3分别进行延迟调用,但我只得到了最后一个值,即3。
OnRaiseBalanceEvent
中发生了什么以及userBalanceObservable
如何获取其值。只是一个小提示,如果你正在使用Subject
,那么你可能做错了一些事情。 - Enigmativity