Почему я хочу поставить свои предметы в сумку?
-
28-10-2019 - |
Вопрос
Я только что видел такой вопрос о 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