#.net
#.net
Вопрос:
Мне было интересно, есть ли у кого-нибудь идеи, почему класс SynchronizedCollection<T> был реализован в сборке ServiceModel. Я не вижу никакой связи между именем сборки и этим (относительно) классом общего назначения.
Ответ №1:
Этот класс довольно специфичен, и его название может даже вводить в заблуждение — его внутренняя реализация практически ничего не делает, за исключением переноса некоторых операций ( Insert
, Add
, Clear
IndexOf
и т.д.) В lock (this.sync) {}
блок, Что не делает его фактически синхронизированным (см. Проблемы, описанные в этой статье — короче говоря, составные операции, такие как LINQ FirstOrDefault
, не являются потокобезопасными на SynchronizedCollection
, поскольку они не получают блокировку).
Он широко используется в самой ServiceModel
сборке и, вероятно, был создан public
только потому, что некоторые ServiceModel
классы предоставляют общедоступные свойства этого типа.
Итак, я предполагаю: это было помещено в ServiceModel
assembly, потому что на самом деле оно не принадлежит BCL и является просто суховатым расширением пространства имен BCL для внутренних ServiceModel
нужд.
Комментарии:
1. Попал сюда из-за следующей ошибки: «не удалось найти тип или имя пространства имен ‘synchronizedcollection'». Это имеет смысл, но документация Microsoft, похоже, ошибочна, поскольку в ней сказано, что это было в Системе. Коллекции. Общий
2. Обновил ссылку и добавил краткий пример проблемы.