我有一个 listBox 并且正在观察何时选择项目:
selectedItems.Subscribe(DoWorkWIthSelectedItems);
observable 返回一个 viewModel 项目数组,在
DoWorkWIthSelectedItems
中,我浏览所选项目的列表并做一些工作。但是,由于用户可能会非常快速地打开/关闭垃圾邮件选择,因此每当对某个项目完成工作时,我不希望在 30 秒内再次对该项目进行任何工作。 30 秒后,如果该项目再次被选中,请继续处理它。有没有 Rx 方法来做到这一点?我不确定它是 Sample 还是 Throttle。此外,我不知道使用 Rx 我是否能够区分数组中适合处理或应该忽略的项目。我是否需要在 viewModel 项上添加一个额外的属性来指示一些“工作”状态?
谢谢。
最佳答案
不管是什么,都必须有某种状态。我认为您最简单的解决方案类似于(伪代码)
var recentlyUsed = new ConcurrentDictionary<T, DateTime>();
...
selectedItems
.Do(/* remove expired items from recentlyUsed */)
.Where(/* items are not in recently used */)
.Do(/* add items to recently used */)
.Subscribe(DoWorkWIthSelectedItems);
关于c# - 响应式(Reactive)扩展示例还是 throttle ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19186420/