ReaderWriterLockSlim.TryEnterWriteLock Metódus

Definíció

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.

A következőre érvényes: