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