我一直在研究将文件监视器包装成一个可观察对象,以帮助处理事件,但我在如何获得所需的行为方面遇到了一些麻烦。文件监视器监视一个目录,将文件放入其中。当文件首次放入该目录时,文件监视器会触发Created事件。但是,如果文件很大或网络连接很慢,则会触发一系列Changed事件,因为文件正在更新。在文件完成写入之前,我不想处理该文件,因此我真正需要的是这个时间表:
|Created |Changed |Changed |Changed
________________________________________________
^Write starts ^Write finishes ^Processing Starts
我研究了Rx中几种过滤事件的方法,但我没有得到我需要的东西,即“在文件X秒未更改后执行函数一次”。节流(throttle)不好用,因为它会丢失中间的事件。缓冲(buffer)也不好用,因为事件可能发生在缓冲边界上。
我曾经考虑使用超时(timeout),但我不太喜欢它们会抛出异常,而且我希望处理可以在文件被写入时开始,而不是等到完全没有事件了再开始。
有一个类似的问题在Reactive Extensions vs FileSystemWatcher上,但从未真正解决。
是否有一种简单的方法可以做到这一点?我相信这不是一个罕见的用例。