SqlParameterCollection.SyncRoot Tulajdonság
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Lekéri az objektumot, amely a hozzáférés szinkronizálására használható.SqlParameterCollection
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
Tulajdonság értéke
Olyan objektum, amely a hozzáférés szinkronizálására használható.SqlParameterCollection
Példák
Az alábbi példakód bemutatja, hogyan zárolhatja a gyűjteményt a SyncRoot tulajdonság használatával a teljes enumerálás során.
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
Megjegyzések
Ez a tag egy explicit felületi tag implementációja. Csak akkor használható, ha a SqlParameterCollection példányt egy ICollection felületre öntötték.
Azon gyűjtemények esetében, amelyek mögöttes tárolója nem érhető el nyilvánosan, a várt megvalósítás az aktuális példány visszaadása. Vegye figyelembe, hogy előfordulhat, hogy az aktuális példányra mutató mutató nem elegendő más gyűjteményeket burkoló gyűjteményekhez; az alapul szolgáló gyűjtemény tulajdonságát kell visszaadnia SyncRoot .
A névtér legtöbb gyűjteményosztálya System.Collections egy metódust Synchronized is implementál, amely szinkronizált burkolót biztosít az alapul szolgáló gyűjtemény körül. A származtatott osztályok azonban a tulajdonság használatával SyncRoot biztosíthatják a gyűjtemény saját szinkronizált verzióját. A szinkronizálási kódnak nem közvetlenül a gyűjteményen, hanem a SyncRoot gyűjtemény tulajdonságán kell műveleteket végrehajtania. Ez biztosítja a más objektumokból származó gyűjtemények megfelelő működését. Pontosabban fenntartja a megfelelő szinkronizálást más szálakkal, amelyek egyidejűleg módosíthatják a gyűjteménypéldányt.
Ha nincs Synchronized metódus a gyűjteményen, a várt használat SyncRoot az alábbiak szerint néz ki:
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
A gyűjteményen keresztüli számbavétel alapvetően nem szálbiztos eljárás. A gyűjtemény szinkronizálása esetén is más szálak módosíthatják a gyűjteményt, ami miatt az enumerátor kivételt okoz. Az enumerálás során a szálbiztonság garantálása érdekében zárolhatja a gyűjteményt a teljes enumerálás során, vagy elkaphatja a más szálak által végrehajtott módosításokból eredő kivételeket.
A következőre érvényes:
Lásd még
- Parancsok és paraméterek (ADO.NET)
- DataAdapter parameters (ADO.NET)
A .NET-keretrendszer Data Provider használata SQL Server - ADO.NET áttekintése