Вопрос

Я только что видел такой вопрос о System.Collections.ConcurrentBag<T> класс, и я видел ViewBag собственность Controller В ASP.NET MVC. По моему опыту, я узнал, что легче использовать код людей, если вы понимаете, что именно они получают при написании. Я думаю, что это довольно понятно, что за List<T> или Dictionary<TKey,TValue> или ReadOnlyCollection<T> предназначены для представления. А Bag С другой стороны, не так интуитивно понятно.

Итак, мой вопрос: Что это Bag Метафора, предназначенная для представления, в частности, в отношении фреймворка .NET?

Это было полезно?

Решение

ConcurrentBag<T> это безопасная потока, неупорядоченная последовательность элементов, которые могут включать дубликаты.

Так по сравнению с некоторыми другими коллекциями:

  • Это неупорядочен, как HashSet<T> но в отличие от List<T>
  • Он может содержать дубликаты, как List<T> но в отличие от HashSet<T>
  • Это просто значения, а не карта (в отличие от Dictionary<TKey, TValue>)
  • Это безопасно, в отличие от всех неконкурсных коллекций-так что вы можете поделиться экземпляром между несколькими потоками, всем чтением и письмом.

Возможное использование включает в себя рабочую очередь, где вас не заботятся о заказе (как иначе вы бы использовали ConcurrentQueue / ConcurrentStack) или список элементов, где вы всегда применяете сортировку после извлечения данных в другую «локальную» коллекцию.

Другие советы

Из первой строки документации MSDN:

Представляет собой безопасную, безупречную коллекцию объектов.

Я не думаю, что это менее интуитивно понятно, чем «список» или «readonlycollection», действительно - YMMV.

Одновременная сумка - это то же самое, что и concurrentStack и coundrentQueue, за исключением того, что он не поддерживает заказ по соображениям производительности, эта статья объясняет это более подробно http://www.emadomara.com/2011/08/what-is-concurrentbag.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top