2011-09-22 18 views
5

Có cách nào để loại bỏ một cụ mục từ một BlockingCollection, như thế này:Loại bỏ một mục cụ thể từ một BlockingCollection <>

IMyItem mySpecificItem = controller.getTopRequestedItem(); 
bool took = myBlockingCollection<IMyItem>.TryTake(out mySpecificItem); 
if(took) 
    process(mySpecificItem); 
..... 

nói cách khác: Tôi muốn loại bỏ một mục từ một BlockingCollection <>, được xác định bởi một số trường (ví dụ ID), không chỉ mục tiếp theo có thể sử dụng được.

Tôi có cần triển khai getHashCode() hoặc IComparer không?

Trả lời

7

BlockingCollection<> sẽ không giúp bạn ở đây. Tôi nghĩ bạn cần ConcurrentDictionary<>.

+0

Không có cách nào thông qua IComparer hoặc HashCode? –

+1

Điều đó sẽ giúp ích như thế nào? 'BlockingCollection <>' không có bất kỳ phương thức nào cho phép rút ra các phần tử cụ thể. –

+0

Cảm ơn bạn đã làm rõ. Vấn đề với ConcurrentDictionary <> là không có thứ tự. Trong kịch bản của tôi, tôi cần một đường ống mục với khả năng loại bỏ một mục ưu tiên theo thời gian (từ 'giữa' của đường ống). Phần còn lại của thời gian các mục cần được xử lý FirstInFirstOut. Tôi sẽ quay lại chủ đề này khi tôi có một giải pháp. –

Các vấn đề liên quan