Нет, это не реальная проблема с подходом .NET 1.x. Свойство является общедоступным, поскольку оно имеет для публичного доступа. Проблема в том, чтобы перечислить коллекцию. Нет никакого способа реализовать это потокобезопасным способом, нет механизма автоматической блокировки, когда вы начинаете перечислять, и разблокировать, когда вы закончите. IEnumerable не имеет метода Completed и не наследует IDisposable.
Таким образом, чтобы код мог безопасно перечисляться, вам нужен доступ к объекту блокировки. Таким образом, вы можете обернуть оператор foreach блокировкой этого объекта. Таким образом, публичное свойство SyncRoot.
Самая большая медвежья ловушка, в которую многие программисты попали, однако, предполагала, что в этом нет необходимости. Принятие во внимание, что свойство Synchronized возвращает поточно-ориентированную оболочку для коллекции, которая является поточно-ориентированной при любых обстоятельствах. Это не так.