【发布时间】:2016-10-07 08:56:15
【问题描述】:
我正在尝试使用响应式扩展来实现事件限制。 我有一个系统,其中可能会针对特定用户或其他实体类型以高频率引发事件。 我需要将事件延迟特定的时间量,一旦超时到期,就会使用最后一个值引发事件。
我做的是这个
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。
【问题讨论】:
-
下次尝试发布最低完整可验证示例 (stackoverflow.com/help/mcve),以便我们确切知道您要实现的目标。理想情况下是单元测试。
-
您确实需要向我们展示所有代码 - 特别是
OnRaiseBalanceEvent中发生了什么以及userBalanceObservable如何获取其值。不过,作为一个小提示,如果您使用的是Subject,您可能做错了什么。
标签: c# system.reactive