SqlParameterCollection.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.
SqlParameterCollectionerişimini eşitlemek için kullanılabilecek bir nesnesi alır.
public:
virtual property System::Object ^ SyncRoot { System::Object ^ get(); };
public override object SyncRoot { get; }
member this.SyncRoot : obj
Public Overrides ReadOnly Property SyncRoot As Object
Özellik Değeri
erişimi SqlParameterCollectioneşitlemek için kullanılabilecek bir nesne.
Örnekler
Aşağıdaki kod örneği, tüm numaralandırma sırasında özelliğini kullanarak koleksiyonu kilitlemeyi SyncRoot gösterir.
ICollection^ myCollection = someCollection;
bool lockTaken = false;
try
{
Monitor::Enter(myCollection->SyncRoot, lockTaken);
for each (Object^ item in myCollection);
{
// Insert your code here.
}
}
finally
{
if (lockTaken)
{
Monitor::Exit(myCollection->SyncRoot);
}
}
ICollection myCollection = someCollection;
lock(myCollection.SyncRoot)
{
foreach (object item in myCollection)
{
// Insert your code here.
}
}
Dim myCollection As ICollection = someCollection
SyncLock myCollection.SyncRoot
For Each item In myCollection
' Insert your code here.
Next item
End SyncLock
Açıklamalar
Bu üye açık bir arabirim üyesi uygulamasıdır. Yalnızca örnek bir ICollection arabirime SqlParameterCollection yayınlandığında kullanılabilir.
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 Synchronized yöntem 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 özelliği ü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 bir Synchronized yöntemin olmaması halinde için beklenen kullanım SyncRoot aşağıdaki gibi görünür:
ICollection^ myCollection = someCollection;
bool lockTaken = false;
try
{
Monitor::Enter(myCollection->SyncRoot, lockTaken);
// Some operation on the collection, which is now thread safe.
}
finally
{
if (lockTaken)
{
Monitor::Exit(myCollection->SyncRoot);
}
}
ICollection myCollection = someCollection;
lock(myCollection.SyncRoot)
{
// Some operation on the collection, which is now thread safe.
}
Dim myCollection As ICollection = someCollection
SyncLock myCollection.SyncRoot
' Some operation on the collection, which is now thread safe.
End SyncLock
Bir koleksiyonda numaralandırma, iş parçacığı açısından 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.