ReaderWriterLockSlim.TryEnterWriteLock Metódus
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.
Megkísérli beírni a zárolást írási módban, opcionális időtúllépéssel.
Túlterhelések
| Name | Description |
|---|---|
| TryEnterWriteLock(Int32) |
Megkísérli beírni a zárolást írási módban, opcionális időtúllépéssel. |
| TryEnterWriteLock(TimeSpan) |
Megkísérli beírni a zárolást írási módban, opcionális időtúllépéssel. |
TryEnterWriteLock(Int32)
Megkísérli beírni a zárolást írási módban, opcionális időtúllépéssel.
public:
bool TryEnterWriteLock(int millisecondsTimeout);
public bool TryEnterWriteLock(int millisecondsTimeout);
member this.TryEnterWriteLock : int -> bool
Public Function TryEnterWriteLock (millisecondsTimeout As Integer) As Boolean
Paraméterek
- millisecondsTimeout
- Int32
A várakozni kívánt ezredmásodpercek száma, vagy -1 (Infinite) a határozatlan ideig történő várakozáshoz.
Válaszok
true ha a hívó szál írási módba lépett, ellenkező esetben false.
Kivételek
A RecursionPolicy tulajdonság az, NoRecursion és az aktuális szál már belépett a zárolásba.
-vagy-
Az aktuális szál kezdetben olvasási módban lépett be a zárolásba, ezért az írási módba való belépéssel holtpontot teremthet.
-vagy-
A rekurziós szám meghaladná a számláló kapacitását. A korlát olyan nagy, hogy az alkalmazások soha nem találkozhatnak vele.
Az érték millisecondsTimeout negatív, de nem egyenlő Infinite (-1), ami az egyetlen megengedett negatív érték.
Az ReaderWriterLockSlim objektumot megsemmisítették.
Példák
Az alábbi példa bemutatja, hogyan lehet a TryEnterWriteLock metódussal írási módban belépni a zárolásba időtúllépéssel. A példában látható metódus új kulcs-érték párokat ad hozzá a szinkronizált gyorsítótárhoz. Ha a megadott időtúllépési időköz eltelik, mielőtt a szál belép a zárolásba, a metódus visszatér false. A metódus akkor ad true vissza, ha a kulcs/érték pár hozzáadva van.
Ha a kulcs már szerepel a gyorsítótárban, a belső Dictionary<TKey,TValue> által okozott kivétel megszakíthatja a metódust. A finally metódus végrehajtásához ExitWriteLock blokkot használunk, amely biztosítja, hogy a hívó kilépjen a zárolásból.
Ez a kód egy nagyobb, az ReaderWriterLockSlim osztályhoz tartozó példa része.
private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
private Dictionary<int, string> innerCache = new Dictionary<int, string>();
Private cacheLock As New ReaderWriterLockSlim()
Private innerCache As New Dictionary(Of Integer, String)
public bool AddWithTimeout(int key, string value, int timeout)
{
if (cacheLock.TryEnterWriteLock(timeout))
{
try
{
innerCache.Add(key, value);
}
finally
{
cacheLock.ExitWriteLock();
}
return true;
}
else
{
return false;
}
}
Public Function AddWithTimeout(ByVal key As Integer, ByVal value As String, _
ByVal timeout As Integer) As Boolean
If cacheLock.TryEnterWriteLock(timeout) Then
Try
innerCache.Add(key, value)
Finally
cacheLock.ExitWriteLock()
End Try
Return True
Else
Return False
End If
End Function
Megjegyzések
Ha millisecondsTimeout 0 (nulla), ez a módszer ellenőrzi a zárolási állapotot, és azonnal visszaadja false , ha a kívánt állapot nem érhető el.
Ha más szálak olvasási módban léptek be a zárolásba, egy olyan szál, amely addig blokkolja a TryEnterWriteLock metódust, amíg ezek a szálak ki nem lépnek az olvasási módból, vagy amíg az időtúllépési időköz el nem telik. Bár a szálak írási módba való belépésre várakozva blokkolva vannak, a további szálak, amelyek olvasási módba vagy frissíthető módba próbálnak lépni, mindaddig blokkolva vannak, amíg az írási módra várakozó összes szál időtúllépést vagy írási módot nem adott meg, majd ki nem lépett belőle.
Note
Ha a zárolás lehetővé teszi a rekurziót, a zárolást írási módban beírt szálak rekurzív módon is beírhatják, még akkor is, ha más szálak írási módra várnak.
A következőre érvényes:
TryEnterWriteLock(TimeSpan)
Megkísérli beírni a zárolást írási módban, opcionális időtúllépéssel.
public:
bool TryEnterWriteLock(TimeSpan timeout);
public bool TryEnterWriteLock(TimeSpan timeout);
member this.TryEnterWriteLock : TimeSpan -> bool
Public Function TryEnterWriteLock (timeout As TimeSpan) As Boolean
Paraméterek
- timeout
- TimeSpan
A várakozási időtartam, vagy -1 ezredmásodperc a határozatlan ideig történő várakozáshoz.
Válaszok
true ha a hívó szál írási módba lépett, ellenkező esetben false.
Kivételek
A RecursionPolicy tulajdonság az, NoRecursion és az aktuális szál már belépett a zárolásba.
-vagy-
Az aktuális szál kezdetben olvasási módban lépett be a zárolásba, ezért az írási módba való belépéssel holtpontot teremthet.
-vagy-
A rekurziós szám meghaladná a számláló kapacitását. A korlát olyan nagy, hogy az alkalmazások soha nem találkozhatnak vele.
Az érték timeout negatív, de nem egyenlő -1 ezredmásodpercekkel, ami az egyetlen megengedett negatív érték.
-vagy-
Az érték timeout nagyobb, mint az Int32.MaxValue ezredmásodperc.
Az ReaderWriterLockSlim objektumot megsemmisítették.
Megjegyzések
Ha timeout 0 (nulla), ez a módszer ellenőrzi a zárolási állapotot, és azonnal visszaadja false , ha a kívánt állapot nem érhető el.
Ha más szálak olvasási módban léptek be a zárolásba, egy olyan szál, amely addig blokkolja a TryEnterWriteLock metódust, amíg ezek a szálak ki nem lépnek az olvasási módból, vagy amíg az időtúllépési időköz el nem telik. Bár a szálak írási módba való belépésre várakozva blokkolva vannak, a további szálak, amelyek olvasási módba vagy frissíthető módba próbálnak lépni, mindaddig blokkolva vannak, amíg az írási módra várakozó összes szál időtúllépést vagy írási módot nem adott meg, majd ki nem lépett belőle.
Note
Ha a zárolás lehetővé teszi a rekurziót, a zárolást írási módban beírt szálak rekurzív módon is beírhatják, még akkor is, ha más szálak írási módra várnak.