Tôi cần truy vấn FIFO đơn người sản xuất, đơn người tiêu dùng vìcó tốt không khi sử dụng BlockingCollection <T> làm truy vấn FIFO đơn, sản xuất đơn lẻ?
- Tôi cần xử lý thư theo thứ tự nhận được.
- Tôi cần làm điều này không đồng bộ vì người gọi không nên đợi trong khi tôi đang xử lý tin nhắn.
- Xử lý tin nhắn tiếp theo sẽ chỉ được bắt đầu khi quá trình xử lý tin nhắn trước đó kết thúc. Đôi khi tần suất thông báo "nhận" cao hơn tần suất của thông báo "đang xử lý". Nhưng trung bình tôi sẽ có thể xử lý tất cả các tin nhắn, chỉ đôi khi tôi phải "xếp hàng" gói chúng.
Vì vậy, nó khá giống TCP/IP tôi nghĩ, nơi bạn có một nhà sản xuất và một người tiêu dùng, SOMETIMES bạn có thể nhận tin nhắn nhanh hơn bạn có thể xử lý, vì vậy bạn phải truy vấn chúng. Trường hợp thứ tự IS quan trọng và nơi người gọi hoàn toàn không quan tâm đến những gì bạn đang làm với nội dung đó.
này nghe có vẻ khá dễ dàng và tôi có khả năng có thể sử dụng chung Queue
cho rằng, nhưng tôi muốn sử dụng BlockingCollection
cho rằng bởi vì tôi không muốn viết bất kỳ mã với ManualResetEvent
, vv
Làm thế nào phù hợp BlockingCollection
cho nhiệm vụ của tôi và có lẽ bạn có thể gợi ý cái gì khác?
Tôi hy vọng rằng việc thực thi FIFO mặc định của 'BlockingCollection' sẽ không bị thay đổi trong một số phiên bản tiếp theo , nhưng đây là một câu hỏi khác ... – javapowered
Tôi tin rằng bạn nên được miễn là bạn đang tham chiếu đến giao diện 'IProducerConsumerCollection', và thực hiện các lớp BCL có thể; t thay đổi theo cách chính như FIFO để một cái gì đó khác – sll
Tôi thấy phương thức Start() chờ hai nhiệm vụ để hoàn thành. Rõ ràng nhiệm vụ 'producerWorker' sẽ kết thúc, nhưng' consumerWorker' sẽ không bao giờ kết thúc. Điều đó có nên được tính đến không? –