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


PropertyCollection.ICollection.IsSynchronized Свойство

Определение

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

property bool System::Collections::ICollection::IsSynchronized { bool get(); };
bool System.Collections.ICollection.IsSynchronized { get; }
member this.System.Collections.ICollection.IsSynchronized : bool
 ReadOnly Property IsSynchronized As Boolean Implements ICollection.IsSynchronized

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

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

Реализации

Комментарии

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

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

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

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

ICollection myCollection = new ICollection();  
  lock(myCollection.SyncRoot) {  
  foreach (Object item in myCollection) {  
  // Insert your code here.  
  }  
 }  
Dim myCollection As New ICollection()  
 Dim item As Object  
 SyncLock myCollection.SyncRoot  
  For Each item In myCollection  
  ' Insert your code here.  
  Next item  
 End SyncLock  

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

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