Потокобезопасная коллекция, которая поддерживает удаление элементов - PullRequest
2 голосов
/ 01 марта 2012

Кажется, я не могу найти безопасный / одновременный сбор потока .NET, который поддерживает простую функцию Remove (), где я могу либо удалить определенный элемент, либо передать предикат для удаления элементов на основе этого.Я пытался:

BlockingCollection<T>
ConcurrentQueue<T>
ConcurrentStack<T>
ConcurrentBag<T>

Кто-нибудь знает коллекцию, которая поддерживает это поведение, или мне нужно создать свою собственную?

Я хочу иметь возможность получить следующий элемент изпотокобезопасная очередь без ее удаления, а затем, если выполняется определенное условие, приступить к ее удалению.

Ответы [ 2 ]

8 голосов
/ 01 марта 2012

Вы пробовали ConcurrentDictionary? У него есть метод TryRemove, поэтому, если вы думаете о ключе как о предикате, вы удалите правильный элемент.

4 голосов
/ 01 марта 2012

Вы уверены, что ConcurrentQueue<T> не соответствует вашим потребностям?У него есть метод TryPeek и метод TryDequeue, которые в точности соответствуют тому, что вы описали в предыдущем абзаце.

...