Почему SynchronizedCollection в системе.Сборка ServiceModel?

#.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. Обновил ссылку и добавил краткий пример проблемы.