Tôi có một ứng dụng hoạt động tuyệt vời để xử lý các tệp nằm trong một thư mục trên máy chủ của tôi. Quá trình này là:Xử lý đồng thời các tệp khi chúng đến trong 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
này hoạt động độc đáo và tôi không bao giờ lo lắng về cùng một tập tin đang được xử lý hai lần hoặc nhiều chủ đề được sinh ra cho cùng một tập tin. Tuy nhiên, nếu có một tệp mất quá nhiều thời gian để xử lý, bướC# 3 sẽ treo trên một tệp đó và giữ tất cả các quá trình xử lý khác. Vì vậy, câu hỏi của tôi là, mô hình chính xác để sinh ra chính xác một luồng cho mỗi tệp mà tôi cần xử lý là gì, trong khi không chặn nếu một tệp mất quá nhiều thời gian? Tôi coi FileSystemWatcher, nhưng các tập tin có thể không đọc được ngay lập tức đó là lý do tại sao tôi liên tục xem tất cả các tệp và tạo ra một tiến trình cho mỗi tệp (sẽ ngay lập tức thoát nếu tệp bị khóa).
Tôi có nên xóa bướC# 3 và duy trì danh sách các tệp tôi đã xử lý không? Điều đó có vẻ lộn xộn và danh sách sẽ phát triển rất lớn theo thời gian vì vậy tôi nghi ngờ có một giải pháp thanh lịch hơn.
Điều gì xảy ra với một tệp sau khi tệp được xử lý? nó vẫn còn trong cùng một thư mục? đã xóa? di chuyển? Ngoài ra, các tệp được bán vào thư mục máy chủ có được đặt tên nhất quán với cùng một phần mở rộng không? – gangelo
Tôi không hiểu quy trình của bạn như được liệt kê ở trên ngăn các tệp được xử lý hai lần như thế nào. –
Sau khi tệp được xử lý, nó bị xóa ở bướC# 2 vì vậy đó là lý do sau khi bướC# 3 hoàn thành, mọi tệp trong thư mục sẽ được xử lý và chưa được xử lý trước đó. – powlette