2012-12-05 82 views
1

我有一个应用程序,其中有一个TimerFileSystemWatcher用于批处理每5分钟更改的文件。已更改文件的批处理

FileSystemWatcher在更改文件时会引发事件,并且只有在检查队列中是否存在文件路径后,才会将文件路径添加到Queue

Timer滴答时,它遍历队列,弹出每个项目并处理它;直到队列为空。

我的问题是:

  • 上午我试图正确地解决这个问题,并使用正确的数据类型?
  • 我需要担心Queue的并发访问吗?如果是这样,我该如何处理?

回答

1

编辑: 问题1:我认为方法和对象,你正在使用的文件的批处理是合适的,因为我看到的。注意:处理更改的时间间隔应该足够公平,以便不会遇到任何文件锁定问题或类似问题。

问题2:如果从同一实例访问队列,那么我看不到任何问题。如果您正在通过不同的线程访问它,则通常会遇到与集合有关的锁定问题,在此情况并非如此。如果计时器滴答在该FileSystemWatcher的增加了,同时“会发生什么:Concurrent Collection types

你的问题 -

话又说回来,如果你遇到的行列通路和线程安全这个问题,要么担心,我会建议使用更改文件?“ - 对这个问题的回答是 - “你不会得到任何异常或错误,并且文件更改添加项目将在下一个计时器滴答处处理。”

+0

我不明白答案1的第一个陈述,或者您的答案2是什么意思 - 请您扩展。如果'Timer'在与FileSystemWatcher添加更改文件的同时发生了什么? – Cheetah

+0

编辑我的答案来说清楚。 – Jsinh

+0

鉴于我现在已经了解Timers过去并且FileSystemWatchers在线程池中的任何线程上通知,可能会有一些需要处理的并发编辑。 – Cheetah