ConcurrentBag в C# отличается от других конкурентных коллекций тем, что это неупорядоченная коллекция. 12 То есть нет заранее определённого порядка, в котором элементы извлекаются из ConcurrentBag. 1
Некоторые другие отличия:
- Оптимизирована для ситуаций, когда один и тот же поток одновременно производит и потребляет элементы из коллекции. 5
- Отсутствие определённого порядка извлечения элементов повышает производительность операции чтения и добавления для ConcurrentBag. 2
- Внутри объекта ConcurrentBag содержатся связанные списки для каждого потока. 2 Элементы добавляются в тот список, который ассоциирован с текущим потоком. 2 При извлечении элементов сначала опустошается локальная очередь данного потока. 2 Если в ней содержатся элементы, то извлечение является максимально эффективным. 2 Если локальная очередь пуста, то поток заимствует элементы из локальных очередей других потоков. 2
Выбор между ConcurrentBag и другими конкурентными коллекциями зависит от конкретных требований и задач разработки.