我有一个课程,其中包括以下三个事件:
现在我正在使用RX.Net与其.Throttle()
功能相结合来减慢突发/频繁传入事件的处理速度,因为我只需要知道最近发生了哪些变化,而不是每一次都是相关的对我来说。
我遇到一些问题的部分是可以随时添加/删除基础数据源,DataSourceFieldChanged
事件流的处理程序使用数据源。
所以基本上DataSourceFieldChanged
事件流应该只在DataSourceLoaded
事件发生后启动,一旦DataSourceUnloaded
事件发生就立即停止,并在DataSourceLoaded
重新发生时重新启动。等等。
发生DataSourceUnloaded
事件后,所有'限制'DataSourceFieldChanged
流不应再次触发..如:{em}发生了DataSourceFieldChanged
事件在发生.Throttle()
事件的DataSourceUnloaded
时间范围内,DataSourceFieldChanged
事件流不应调用处理程序。
如果(nother)DataSourceLoaded
事件发生在前一个500毫秒DataSourceFieldChanged
.Throttle()
窗口之内或之外,它们也应该不会触发DataSourceFieldChanged
处理程序。
有没有办法将这三个事件流放在一个组合的RX.Net语句中?
此外&理想情况下,如果在DataSourceFieldChanged
事件发生时DataSourceUnloaded
的处理程序已经在运行,是否可以将CancellationToken
传递给事先触发的DataSourceFieldChanged
处理程序并让我取消正在进行的活动(这样我就不会尝试访问现已消失的数据源)?
答案 0 :(得分:2)
假设DataSourceLoaded
和DataSourceUnloaded
事件总是成对出现:
from _ in DataSourceLoaded
from changed in DataSourceFieldChanged.Throttle(x).TakeUntil(DataSourceUnloaded)
select changed;
将其读作:
DataSourceLoaded
事件,DataSourceFieldChanged
事件,DataSourceUnloaded
事件。