Aracılığıyla paylaş


PropertyCollection.ICollection.SyncRoot Özellik

Tanım

ICollectionerişimini eşitlemek için kullanılabilecek bir nesnesi alır.

property System::Object ^ System::Collections::ICollection::SyncRoot { System::Object ^ get(); };
object System.Collections.ICollection.SyncRoot { get; }
member this.System.Collections.ICollection.SyncRoot : obj
 ReadOnly Property SyncRoot As Object Implements ICollection.SyncRoot

Özellik Değeri

erişimi ICollectioneşitlemek için kullanılabilecek bir nesne.

Uygulamalar

Açıklamalar

Temel deposu genel kullanıma açık olmayan koleksiyonlar için beklenen uygulama geçerli örneği döndürmektir. Geçerli örneğe yönelik işaretçinin diğer koleksiyonları sarmalayan koleksiyonlar için yeterli olmayabileceğini unutmayın; bunlar, temel alınan koleksiyonun SyncRoot özelliğini döndürmelidir.

Ad alanı içindeki koleksiyon sınıflarının System.Collections çoğu, temel koleksiyonun çevresinde eşitlenmiş sarmalayıcı sağlayan Bir Eşitlenmiş yöntemi de uygular. Ancak, türetilmiş sınıflar özelliğini kullanarak SyncRoot koleksiyonun kendi eşitlenmiş sürümünü sağlayabilir. Eşitleme kodu, doğrudan koleksiyon üzerinde SyncRoot değil, koleksiyonun üzerinde işlemler gerçekleştirmelidir. Bu, diğer nesnelerden türetilen koleksiyonların düzgün çalışmasını sağlar. Özellikle, koleksiyon örneğini aynı anda değiştirebilecek diğer iş parçacıklarıyla doğru eşitlemeyi korur.

Bir koleksiyonda Eşitlenmiş yöntemin olmaması halinde için beklenen kullanım SyncRoot şöyle görünür:

ICollection MyCollection =...
 lock(MyCollection.SyncRoot) {
  // Some operation on the collection, which is now thread safe.
 }
Dim myCollection as New ICollection()
 SyncLock myCollection.SyncRoot
  ' Some operation on the collection, which is now thread safe.
 End SyncLock

Bir koleksiyonda numaralandırma, iş parçacığı güvenli bir yordam değildir. Bir koleksiyon eşitlendiğinde bile, diğer iş parçacıkları yine de koleksiyonu değiştirebilir ve bu da numaralandırıcının bir özel durum oluşturmasına neden olur. Numaralandırma sırasında iş parçacığı güvenliğini garanti etmek için, tüm numaralandırma sırasında koleksiyonu kilitleyebilir veya diğer iş parçacıkları tarafından yapılan değişikliklerden kaynaklanan özel durumları yakalayabilirsiniz.

Aşağıdaki kod örneğinde, tüm numaralandırma sırasında kullanarak SyncRoot koleksiyonun nasıl kilitlenmesi gösterilmektedir:

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

Şunlara uygulanır

Ayrıca bkz.