ReaderWriterLockSlim.TryEnterWriteLock Methode

Definition

Versucht, die Sperre im Schreibmodus mit einem optionalen Timeout einzugeben.

Überlädt

Name Beschreibung
TryEnterWriteLock(Int32)

Versucht, die Sperre im Schreibmodus mit einem optionalen Timeout einzugeben.

TryEnterWriteLock(TimeSpan)

Versucht, die Sperre im Schreibmodus mit einem optionalen Timeout einzugeben.

TryEnterWriteLock(Int32)

Versucht, die Sperre im Schreibmodus mit einem optionalen Timeout einzugeben.

public:
 bool TryEnterWriteLock(int millisecondsTimeout);
public bool TryEnterWriteLock(int millisecondsTimeout);
member this.TryEnterWriteLock : int -> bool
Public Function TryEnterWriteLock (millisecondsTimeout As Integer) As Boolean

Parameter

millisecondsTimeout
Int32

Die Anzahl der zu wartenden Millisekunden oder -1 (Infinite) auf unbestimmte Zeit.

Gibt zurück

true wenn der aufrufende Thread den Schreibmodus eingegeben hat, andernfalls false.

Ausnahmen

Die RecursionPolicy Eigenschaft ist NoRecursion und der aktuelle Thread hat bereits die Sperre eingegeben.

-oder-

Der aktuelle Thread hat zunächst die Sperre im Lesemodus eingegeben, und daher würde der Versuch, in den Schreibmodus zu wechseln, die Möglichkeit eines Deadlocks schaffen.

-oder-

Die Rekursionszahl würde die Kapazität des Zählers überschreiten. Der Grenzwert ist so groß, dass Anwendungen niemals darauf stoßen sollten.

Der Wert von millisecondsTimeout ist negativ, ist aber nicht gleich Infinite (-1), bei dem es sich um den einzigen negativen Wert handelt, der zulässig ist.

Das ReaderWriterLockSlim Objekt wurde verworfen.

Beispiele

Das folgende Beispiel zeigt, wie Sie die TryEnterWriteLock Methode verwenden, um die Sperre im Schreibmodus mit einem Timeout einzugeben. Die im Beispiel gezeigte Methode fügt dem synchronisierten Cache ein neues Schlüssel-Wert-Paar hinzu. Wenn das angegebene Timeoutintervall verstrichen ist, bevor der Thread die Sperre eingibt, gibt die Methode zurück false. Die Methode gibt zurück true , wenn das Schlüssel-Wert-Paar hinzugefügt wird.

Wenn sich der Schlüssel bereits im Cache befindet, kann die vom inneren Dictionary<TKey,TValue> Ausgelöste Ausnahme die Methode beenden. Zum Ausführen der ExitWriteLock Methode wird ein finally Block verwendet, um sicherzustellen, dass der Aufrufer die Sperre verlässt.

Dieser Code ist Teil eines größeren Beispiels, das für die ReaderWriterLockSlim Klasse bereitgestellt wird.

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

Hinweise

Wenn millisecondsTimeout 0 (null) ist, überprüft diese Methode den Sperrzustand und gibt false sofort zurück, wenn der gewünschte Zustand nicht verfügbar ist.

Wenn andere Threads die Sperre im Lesemodus eingegeben haben, wird ein Thread, der die TryEnterWriteLock Methodenblöcke aufruft, bis diese Threads den Lesemodus beendet haben oder bis das Timeoutintervall abgelaufen ist. Während Threads blockiert werden, die auf den Schreibmodus warten, haben zusätzliche Threads, die versuchen, in den Lesemodus zu wechseln oder den Upgrademodus zu blockieren, bis alle Threads, die auf den Schreibmodus warten, entweder timeout oder in den Schreibmodus eingegeben und dann beendet wurden.

Note

Wenn eine Sperre Rekursion zulässt, kann ein Thread, der die Sperre in den Schreibmodus eingegeben hat, rekursiv in den Schreibmodus wechseln, auch wenn andere Threads darauf warten, in den Schreibmodus zu wechseln.

Gilt für:

TryEnterWriteLock(TimeSpan)

Versucht, die Sperre im Schreibmodus mit einem optionalen Timeout einzugeben.

public:
 bool TryEnterWriteLock(TimeSpan timeout);
public bool TryEnterWriteLock(TimeSpan timeout);
member this.TryEnterWriteLock : TimeSpan -> bool
Public Function TryEnterWriteLock (timeout As TimeSpan) As Boolean

Parameter

timeout
TimeSpan

Das zu wartende Intervall oder -1 Millisekunden, um auf unbestimmte Zeit zu warten.

Gibt zurück

true wenn der aufrufende Thread den Schreibmodus eingegeben hat, andernfalls false.

Ausnahmen

Die RecursionPolicy Eigenschaft ist NoRecursion und der aktuelle Thread hat bereits die Sperre eingegeben.

-oder-

Der aktuelle Thread hat zunächst die Sperre im Lesemodus eingegeben, und daher würde der Versuch, in den Schreibmodus zu wechseln, die Möglichkeit eines Deadlocks schaffen.

-oder-

Die Rekursionszahl würde die Kapazität des Zählers überschreiten. Der Grenzwert ist so groß, dass Anwendungen niemals darauf stoßen sollten.

Der Wert von timeout ist negativ, ist aber nicht gleich -1 Millisekunden, was der einzige negative Wert ist, der zulässig ist.

-oder-

Der Wert von timeout " Int32.MaxValue Millisekunden" ist größer.

Das ReaderWriterLockSlim Objekt wurde verworfen.

Hinweise

Wenn timeout 0 (null) ist, überprüft diese Methode den Sperrzustand und gibt false sofort zurück, wenn der gewünschte Zustand nicht verfügbar ist.

Wenn andere Threads die Sperre im Lesemodus eingegeben haben, wird ein Thread, der die TryEnterWriteLock Methodenblöcke aufruft, bis diese Threads den Lesemodus beendet haben oder bis das Timeoutintervall abgelaufen ist. Während Threads blockiert werden, die auf den Schreibmodus warten, haben zusätzliche Threads, die versuchen, in den Lesemodus zu wechseln oder den Upgrademodus zu blockieren, bis alle Threads, die auf den Schreibmodus warten, entweder timeout oder in den Schreibmodus eingegeben und dann beendet wurden.

Note

Wenn eine Sperre Rekursion zulässt, kann ein Thread, der die Sperre in den Schreibmodus eingegeben hat, rekursiv in den Schreibmodus wechseln, auch wenn andere Threads darauf warten, in den Schreibmodus zu wechseln.

Gilt für: