我希望在我的一个视图模型中实现一些限流行为。这是一个Silverlight应用程序,但我认为这并不特别重要。
考虑一个具有三个属性的类:
- Property1 - Property2 - Property3
每当更新其中一个属性时,都需要进行刷新。
我的目标如下:
考虑一个具有三个属性的类:
- Property1 - Property2 - Property3
每当更新其中一个属性时,都需要进行刷新。
private void Refresh()
{
//Call out to the server, do something when it comes back
}
我的目标如下:
- 如果正在进行刷新操作,我们最好取消向服务器的调用,并发起一个新请求
- 如果更改属性,我们应该留出一小段时间(可能是0.1秒)等待其他更改。这样,如果多个属性被快速更改(例如,以编程方式),我们不会向服务器发送大量请求。这个0.1秒窗口在每次更改时可以重置,但不是必须的。
如果有影响的话,我正在使用ChannelFactory实现来调用服务器。
我可以使用什么样的模式来实现这个目标?这是反应式扩展能帮助我的吗?
编辑:
将Paul的答案标记为正确。虽然ReactiveUI目前不能用于silverlight5,但它清楚地概述了使用Rx解决问题的方法/组合步骤。