SqlParameterCollection.SyncRoot Özellik

Tanım

erişimi SqlParameterCollectioneş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 SyncRoot koleksiyonun nasıl kilitlenmesini 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 alınan deposu genel kullanıma açık olmayan koleksiyonlar için beklenen uygulama geçerli örneği döndürmektir. Geçerli örneğin işaretçisinin diğer koleksiyonları sarmalayan koleksiyonlar için yeterli olmayabileceğini unutmayın; bunlar temel koleksiyonun SyncRoot özelliğini döndürmelidir. Ad alanında çoğu koleksiyon sınıfı, temel koleksiyonun System.Collections çevresinde eşitlenmiş bir sarmalayıcı sağlayan bir yöntem de uygular Synchronized . Ancak türetilmiş sınıflar, özelliğini kullanarak SyncRoot koleksiyonun kendi eşitlenmiş sürümlerini sağlayabilir. Eşitleme kodu, doğrudan koleksiyon üzerinde SyncRoot değil, koleksiyonun özelliğinde 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 SyncRoot beklenen kullanım 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 koleksiyon ile numaralandırma, aslında iş parçacığı açısından güvenli 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.

Şunlara uygulanır

Ayrıca bkz.