使用 TPL 数据流处理指定时间范围内的所有文件更改事件
Process all file change events within specified time frame with TPL Dataflow
我正在跨多个目录监视多个日志文件。我需要在文件触发 onchange 事件时触发 SSIS 包。很简单,但复杂的是我不想每次文件发生变化时都触发 SSIS 包。我想等待并捕获对特定文件的至少 5 分钟的更改。
在我知道它会触发新线程中的每个 onchange 事件之前使用过 FilewSystemWatcher - 我的想法是将这些事件传递到 TPL 块并让它等待指定的时间间隔,然后触发 SSIS 包。如果有文件更改事件,基本上每 5 分钟触发一个相关的 SSIS 包。
如果有人能指出正确的方向作为起点,我将不胜感激!
我无法从你的问题中判断 TPL 数据流是必需的还是只是一个想法。
我可能会保持简单并避免 TPL 数据流。只需使用 System.Threading.Timer
进行轮询并让它检查文件上的 System.IO.File.GetLastWriteTime
。
如果你想要花哨的,你可以使用 Rx,将 FilewSystemWatcher
事件转换为 Observable
,然后使用 Buffer(TimeSpan)
方法。
TPL 数据流对时间没有任何内在支持 windows 您必须自己动手,可能使用上述两种方法之一来构建它。我使用 TPL Dataflow 的经验是它对于小任务来说太大太麻烦,而对于大任务又太初级,所以我会避免采用这种方法。
我正在跨多个目录监视多个日志文件。我需要在文件触发 onchange 事件时触发 SSIS 包。很简单,但复杂的是我不想每次文件发生变化时都触发 SSIS 包。我想等待并捕获对特定文件的至少 5 分钟的更改。
在我知道它会触发新线程中的每个 onchange 事件之前使用过 FilewSystemWatcher - 我的想法是将这些事件传递到 TPL 块并让它等待指定的时间间隔,然后触发 SSIS 包。如果有文件更改事件,基本上每 5 分钟触发一个相关的 SSIS 包。
如果有人能指出正确的方向作为起点,我将不胜感激!
我无法从你的问题中判断 TPL 数据流是必需的还是只是一个想法。
我可能会保持简单并避免 TPL 数据流。只需使用 System.Threading.Timer
进行轮询并让它检查文件上的 System.IO.File.GetLastWriteTime
。
如果你想要花哨的,你可以使用 Rx,将 FilewSystemWatcher
事件转换为 Observable
,然后使用 Buffer(TimeSpan)
方法。
TPL 数据流对时间没有任何内在支持 windows 您必须自己动手,可能使用上述两种方法之一来构建它。我使用 TPL Dataflow 的经验是它对于小任务来说太大太麻烦,而对于大任务又太初级,所以我会避免采用这种方法。