Aracılığıyla paylaş


SearchResultCollection.ICollection.SyncRoot Özellik

Tanım

erişimi ICollectioneş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

öğesine 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ında System.Collections çoğu koleksiyon sınıfı, temel alınan koleksiyonun çevresinde eşitlenmiş sarmalayıcı sağlayan bir Synchronized 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 toplulukları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 düzgün eşitlemeyi sürdürür.

Bir koleksiyonda bir yöntemin Synchronized 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ırmak, doğası gereği iş parçacığı güvenli bir yordam değildir. Bir koleksiyon eşitlendiği zaman bile, diğer iş parçacıkları numaralandırıcının özel durum oluşturmasına neden olan koleksiyonu değiştirebilir. Numaralandırma sırasında iş parçacığı güvenliği sağlamak 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ği, tüm numaralandırma sırasında kullanarak koleksiyonun SyncRoot nasıl kilitlenmesini gösterir:

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.