我有一個應用程序,非常適合處理文件,在我的服務器上的目錄着陸。這個過程是:同時處理文件,因爲他們到達C#
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步並保留已處理的文件列表嗎?這似乎很混亂,隨着時間的推移,名單會變得非常大,所以我懷疑有更優雅的解決方案。
文件處理後會發生什麼?它保持在同一個目錄中嗎?刪除嗎?感動?另外,這些文件是否被轉儲到與相同擴展名一致的服務器目錄中? – gangelo
我不明白上面列出的過程如何防止文件被處理兩次。 –
處理文件後,它在步驟#2中被刪除,這就是爲什麼在步驟#3完成之後,文件夾中的任何文件都將被處理並且之前未被處理的原因。 – powlette