C# 反应式扩展示例还是节流阀?

C# 反应式扩展示例还是节流阀?,c#,wpf,system.reactive,C#,Wpf,System.reactive,我有一个列表框,在选择项目时正在观察: selectedItems.Subscribe(DoWorkWIthSelectedItems); observable返回一个viewModel项目数组,在DoWorkWIthSelectedItems中,我查看所选项目列表并做一些工作。然而,由于用户可能会很快地打开/关闭垃圾邮件选择,每当在某个项目上完成工作时,我不希望在30秒内再次在该项目上完成任何工作。30秒后,如果再次选择该项目,请继续操作 有没有办法做到这一点?我不确定是样品还是节流阀。此外

我有一个列表框,在选择项目时正在观察:

selectedItems.Subscribe(DoWorkWIthSelectedItems);
observable返回一个viewModel项目数组,在
DoWorkWIthSelectedItems
中,我查看所选项目列表并做一些工作。然而,由于用户可能会很快地打开/关闭垃圾邮件选择,每当在某个项目上完成工作时,我不希望在30秒内再次在该项目上完成任何工作。30秒后,如果再次选择该项目,请继续操作

有没有办法做到这一点?我不确定是样品还是节流阀。此外,我不知道使用Rx是否能够区分阵列中哪些项目适合处理,哪些项目应该忽略。我是否需要viewModel项上的附加属性来指示某些“工作”状态


谢谢。

不管发生什么,都会有一些状态。我认为最简单的解决方案是(伪代码)

var recentlyUsed=新的ConcurrentDictionary();
...
选择编辑
.Do(/*从最近使用的*/中删除过期项目)
。其中(/*项不在最近使用的*/)
.Do(/*将项目添加到最近使用的*/)
.认购(与SelectedItems合作);

您是否考虑在底层集合源上设置一个筛选器,以便该项被过滤掉,直到它再次符合条件吗?@ GarryVass Hmm. Don认为我不能这样做,因为其他数据的观察员要求所有数据在到达时都要流过。谢谢布莱恩。基于Rx帮助的所有事情,我不确定它是否也有一些秘密来自己做这件事,但我正朝着同样的结论前进。我认为在我的DoWork方法中,我会将已完成的项目添加到列表中,并在时间限制过后使用ObservableTimer删除这些项目。您可能可以使用
窗口
执行一些魔术,但我不知道您将如何执行,而且我认为这在任何方面都不会更有效。
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);