Tôi đã viết một chương trình trong F # liệt kê tất cả các thư mục trên đĩa không đồng bộ. Một tác vụ async liệt kê tất cả các tệp trong một thư mục đã cho và tạo các nhiệm vụ không đồng bộ riêng biệt (các trình tiện ích: Tôi bắt đầu chúng bằng cách sử dụng Async.Start) để liệt kê các thư mục con. Tất cả chúng đều truyền đạt kết quả tới trung tâm MailboxProcessor.Rào cản không đồng bộ trong F #
Vấn đề của tôi là, làm thế nào để phát hiện ra rằng tất cả các nhiệm vụ daemon đã kết thúc và sẽ không có tệp nào khác đến. Về cơ bản, tôi cần một rào cản cho tất cả các nhiệm vụ là trẻ em trực tiếp và gián tiếp của nhiệm vụ hàng đầu của tôi. Tôi không thể tìm thấy bất cứ điều gì như thế trong mô hình không đồng bộ của F #.
Điều tôi đã làm thay vào đó là tạo một Trình xử lý hộp thư riêng biệt, nơi tôi đăng ký bắt đầu và kết thúc của mỗi tác vụ. Khi số đếm hoạt động chuyển sang không, tôi đã hoàn thành. Nhưng tôi không hài lòng với giải pháp đó. Bất cứ một đề nghị nào khác?
giải pháp của bạn có vấn đề gì? Có lẽ bạn có thể sử dụng một đại lý giám sát công việc phải làm, và rất nhiều đại lý yêu cầu công việc. Các công nhân nhận được một thư mục để khám phá sau đó lấy các tập tin trong thư mục coresponding, sau đó họ gửi lại kết quả cho người giám sát (không nhất thiết giống như người đầu tiên) và đăng các thư mục con để khám phá người giám sát công việc – jlezard