Tôi có một số BlockingCollection
đồng thời với các yếu tố lặp lại. Làm thế nào có thể sửa đổi nó để thêm hoặc nhận các phần tử riêng biệt?Bộ sưu tập đồng thời và các yếu tố độc đáo
5
A
Trả lời
4
Cửa hàng sao lưu mặc định cho BlockingCollection
là ConcurrentQueue
. Như một người khác đã chỉ ra, thật khó để thêm các mục riêng biệt bằng cách sử dụng điều đó.
Tuy nhiên, bạn có thể tạo loại bộ sưu tập của riêng mình triển khai IProducerConsumerCollection
và chuyển cho nhà xây dựng BlockingCollection
.
Hãy tưởng tượng một ConcurrentDictionary
có chứa các khóa của các mục hiện có trong hàng đợi. Để thêm một mục, trước tiên bạn gọi TryAdd
trên từ điển và nếu mặt hàng đó không có trong từ điển bạn thêm vào, và cũng có thể thêm nó vào hàng đợi. Take
(và TryTake
) lấy mục tiếp theo từ hàng đợi, xóa nó khỏi từ điển và quay lại.
Tôi thích nếu có đồng thời HashTable
, nhưng vì không có một, bạn sẽ phải thực hiện với ConcurrentDictionary
.
Các vấn đề liên quan
- 1. Bộ sưu tập đồng thời không chặn?
- 2. cách nhanh để mở rộng một bộ nếu chúng ta biết yếu tố độc đáo
- 3. Cách đảm bảo danh sách chứa các yếu tố độc đáo?
- 4. Meteor/Mongo: Tìm và cập nhật các yếu tố nhất định trong bộ sưu tập
- 5. backbone.js: thêm một yếu tố để một bộ sưu tập mà không cần render tất cả các bộ sưu tập
- 6. Nhận kết hợp độc đáo của các yếu tố từ một danh sách python
- 7. Tìm nguyên tố phổ biến độc đáo từ 3 mảng
- 8. PHP: cách làm foreach và bắt đầu từ yếu tố thứ sáu của bộ sưu tập?
- 9. Bộ sưu tập được đồng bộ hóa
- 10. Cách tìm các yếu tố trong bộ sưu tập theo bất động sản?
- 11. Tìm các yếu tố tồn tại trong cả hai bộ sưu tập sử dụng LINQ
- 12. Symfony2: tùy chỉnh ID yếu tố hình thức trong các bộ sưu tập hình thức
- 13. Các bộ sưu tập có một số ràng buộc (thời gian và kích thước) trong Java
- 14. Cách sắp xếp bộ sưu tập đồng thời trong .NET 4.0
- 15. Chiến lược xuất bản/đăng ký Meteor cho các bộ sưu tập phía máy khách độc đáo
- 16. MongoDB: chỉ số độc đáo về sở hữu mảng yếu tố của
- 17. ID độc đáo với thời gian()
- 18. Sql server 2008, là các bảng tạm thời độc đáo
- 19. Tạo các biến độc đáo
- 20. Làm thế nào để có được các yếu tố độc đáo từ một mảng băm trong Ruby?
- 21. Tạo tất cả các tập con "độc đáo" của một tập (không phải là một Powerset)
- 22. giáp, tự động ném bỏ, non-blocking, bộ sưu tập đồng thời
- 23. Trong Clojure, làm thế nào để chống lại hoặc kết hợp các yếu tố của một bộ sưu tập chứ không phải chính bộ sưu tập?
- 24. Cách giữ bộ sưu tập các mô hình và kiểu xem đồng bộ
- 25. hashcode độc đáo
- 26. Sự kiện đồng bộ Backbone.js trong bộ sưu tập
- 27. LINQ độc đáo như thế nào?
- 28. Mongodb chỉ số thưa thớt độc đáo
- 29. MPMediaItemPropertyPersistentID độc đáo như thế nào?
- 30. MongoDB Morphia - Độc đáo
Thêm các yếu tố khác biệt có vẻ là [đáng ngạc nhiên khó khăn] (http://stackoverflow.com/questions/6603969/how-to-access-the-underlying-default-concurrent-queue-of-a-blocking-collection) nếu không phải là không thể. 'BlockingCollection' thực hiện' IEnumerable ', vì vậy bạn có thể sử dụng' Distinct() '. –
Bạn có thể sử dụng mã được cung cấp trong câu hỏi StackOverflow được liên kết bởi GertArnold nhưng chỉ đơn giản là luôn trả về true trong triển khai TryAdd và TryTake của một IProducerConsumerCollection. Điều này sẽ làm việc. Tôi biết nó là hình thức khủng khiếp nhưng nó _would_ làm việc, và BlockingCollection đã phá vỡ hình thức ở chỗ nó ném một ngoại lệ. Thật khủng khiếp. – Kevek