Tôi cố gắng triển khai ConcurrentDictionary bằng cách gói nó trong một BlockingCollection nhưng dường như không thành công.Làm thế nào để bọc ConcurrentDictionary trong BlockingCollection?
Tôi hiểu rằng một khai báo biến làm việc với BlockingCollection như ConcurrentBag<T>
, ConcurrentQueue<T>
vv
Vì vậy, để tạo ra một ConcurrentBag bọc trong một BlockingCollection tôi sẽ kê khai và nhanh chóng như thế này:
BlockingCollection<int> bag = new BlockingCollection<int>(new ConcurrentBag<int>());
nhưng làm thế nào để làm điều đó cho ConcurrentDictionary? Tôi cần chức năng chặn của BlockingCollection ở cả phía nhà sản xuất và người tiêu dùng.
Từ điển (và ConcurrentDictionary nữa) không giữ thứ tự các mục. Bạn có thể mô tả kịch bản người tiêu dùng sản xuất của bạn không? – Dennis
@ Dennis, tôi biết điều đó. Một nhà sản xuất lưu trữ KeyValuePairs trong concurrentDictionary, và một nhiệm vụ tiêu dùng tăng một int và loại bỏ KeyValuePair nếu int khớp với khóa tương ứng. Tôi làm điều này bởi vì các nhiệm vụ của nhân viên cư trú concurrentDictionary với các giá trị nhưng theo thứ tự tùy ý, nhiệm vụ của người tiêu dùng đảm bảo các giá trị nhận được được truyền vào/làm việc theo thứ tự đúng. ConcurrentDictionary có thể được bao bọc trong BlockingCollection không? –
Bạn đã đưa ra giải pháp nào? Tôi đang cố gắng tìm một giải pháp tốt cho một vấn đề tương tự, nơi nhà sản xuất không sản xuất các mặt hàng theo thứ tự mà người tiêu dùng cần. (bài cũ tôi biết, nhưng nó đáng để thử) – Kim