Pull to refresh

Comments 4

Было бы замечательно рассказать где это нужно использовать, какой-то реальный пример.
По статье все хорошо, лаконично и просто.
По поводу комментов, то не переживайте — тема же специфичная.
Реальный пример, когда может понадобиться использовать ConcurrentBag — это параллельный поиск заданного элемента из нескольких источников и подсчет его вхождений в каждом из них. В данной коллекции удобно хранить промежуточные значения результатов поиска с учетом того, что эти значения могут совпадать.
ConcurrentBag — это не упорядоченный список. Поэтому теоретически он должен работать быстрее того же ConcurrentQueue.
Теперь подумаем, почему его не часто применяют. Скажем вы реализовали паттерн Producer-Consumer. Как правило обработка ваших задач занимает в разы больше времени, чем добавление/получение элемента ConcurrentQueue. Получается выигранное время ничтожно мало. С другой стороны, желательно первым обработать ту задачу, которая пришла раньше. Иначе какая то задача может «зависнуть». А так же часто порядок событий/сообщений не должен нарушаться.
Вот и получаем, что программист предпочтет упорядоченные списки.
И ещё, использование коллекции ConcurrentBag отлично решение при реализации алгоритма MapReduce на C#.
Sign up to leave a comment.

Articles