我有一个应用程序,非常适合处理位于我的服务器上的目录中的文件.过程是:
1) check for files in a directory 2) queue a user work item to handle each file in the background 3) wait until all workers have completed 4) goto 1
这很好用,我从不担心同一个文件被处理两次或多个线程为同一个文件生成.但是,如果有一个文件需要很长时间才能处理,那么步骤#3会挂起该文件并保留所有其他处理.
所以我的问题是,为我需要处理的每个文件生成一个线程的正确范例是什么,而如果一个文件需要太长时间则不阻塞?我考虑过FileSystemWatcher,但文件可能无法立即读取,这就是为什么我不断查看所有文件并为每个文件生成一个进程(如果文件被锁定将立即退出).
我应该删除步骤#3并维护我已经处理过的文件列表吗?这似乎很混乱,随着时间的推移,列表会变得非常大,所以我怀疑这是一个更优雅的解决方案.