例如,我有一个应用程序,其中包含 aTimer
和 aFileSystemWatcher
用于每 5 分钟对更改的文件进行批处理。
仅在检查文件是否已存在于队列中之后,才会在FileSystemWatcher
更改文件并将文件路径添加到 a 时引发事件。Queue
当Timer
滴答声遍历队列时,弹出每个项目并处理它;直到队列为空。
我的问题是:
- 我是否正在尝试正确解决此问题并使用正确的数据类型?
- 我需要担心并发访问
Queue
吗?如果是这样,我应该如何处理?
例如,我有一个应用程序,其中包含 aTimer
和 aFileSystemWatcher
用于每 5 分钟对更改的文件进行批处理。
仅在检查文件是否已存在于队列中之后,才会在FileSystemWatcher
更改文件并将文件路径添加到 a 时引发事件。Queue
当Timer
滴答声遍历队列时,弹出每个项目并处理它;直到队列为空。
我的问题是:
Queue
吗?如果是这样,我应该如何处理?已编辑: 问题 1:我认为您用于批量处理文件的方法和对象在我看来是合适的。注意:处理更改的时间间隔应该足够公平,这样您就不会遇到任何文件锁定问题或类似问题。
问题 2:如果从同一个实例访问队列,那么我看不到任何问题。如果您从不同的线程访问它,您通常会遇到集合锁定问题,这里不是这种情况。
再说一次,如果您遇到该问题或担心队列访问和线程安全,我建议您使用 -并发集合类型
您的问题:“如果计时器在 FileSystemWatcher 添加更改的文件的同时滴答作响,会发生什么?” - 这个问题的答案是 - “您不会得到任何异常或错误,并且文件更改添加项目将在下一个计时器滴答时出现以进行处理。”