PropertyCollection.ICollection.SyncRoot Özellik
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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