Прочитать на английском

Поделиться через


ICollection.IsSynchronized Свойство

Определение

Возвращает значение, показывающее, является ли доступ к коллекции ICollection синхронизированным (потокобезопасным).

public bool IsSynchronized { get; }

Значение свойства

true, если доступ к классу ICollection является синхронизированным (потокобезопасным); в противном случае — false.

Комментарии

Свойство SyncRoot возвращает объект, который может использоваться для синхронизации доступа к коллекции ICollection.

Большинство классов коллекций System.Collections в пространстве имен также реализуют метод Synchronized, который предоставляет синхронизированную оболочку вокруг базовой коллекции.

Перечисление коллекции не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки могут ее изменить, что приведет к тому, что перечислитель создаст исключение. Для обеспечения потокобезопасности при перечислении можно либо заблокировать коллекцию на все время перечисления, либо перехватывать исключения, возникающие в результате изменений, внесенных другими потоками.

В следующем примере кода показано, как заблокировать коллекцию SyncRoot с помощью свойства во время всего перечисления.

ICollection myCollection = someCollection;
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

См. также раздел