我有一个方法,它将Progress<T>
作为参数,并在内部报告进度。
由于进度可能在工作线程上快速发生(例如每秒数百次),我需要对其进行缓冲,然后使用收到的记录更新视图模型,例如:每半秒钟一次。
过去我使用过Observable.FromEventPattern().Buffer(TimeSpan)
所以我看到如果我将Progress<T>
报告包装到一个事件中,就可以使用相同的Rx机制。然而,这似乎是一种矫枉过正。有更优雅的解决方案吗?
我也查看了TPL Dataflow的BufferBlock
,但我不确定它是否支持基于时间的缓冲,例如每半秒钟一次。
如果有人有例子,请发布。非常感谢。
答案 0 :(得分:5)
RX是这样做的明显选择,但是你不需要&#34;需要&#34;要使用事件来使用RX,在你的情况下你可以简单地使用Subject<Progress<T>>
并让你的方法(当前获得Progress<T>
作为参数)将数据推送到主题中。然后,就像您之前在事件源上观察到的那样,您可以对主题进行RX查询
然而,如果你对事件的处理方式比你习惯的方式更好,我根本就没有看到任何过度杀戮。