ReaderWriterLockSlim.TryEnterWriteLock Methode

Definition

Versucht, die Sperre im Schreibmodus zu erhalten. Optional wird ein Timeout berücksichtigt.

Überlädt

TryEnterWriteLock(Int32)

Versucht, die Sperre im Schreibmodus zu erhalten. Optional wird ein Timeout berücksichtigt.

TryEnterWriteLock(TimeSpan)

Versucht, die Sperre im Schreibmodus zu erhalten. Optional wird ein Timeout berücksichtigt.

TryEnterWriteLock(Int32)

Quelle:
ReaderWriterLockSlim.cs
Quelle:
ReaderWriterLockSlim.cs
Quelle:
ReaderWriterLockSlim.cs

Versucht, die Sperre im Schreibmodus zu erhalten. Optional wird ein Timeout berücksichtigt.

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 Zeit in Millisekunden, die gewartet wird, oder -1 (Infinite), um unbegrenzt zu warten.

Gibt zurück

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

Ausnahmen

Die RecursionPolicy-Eigenschaft ist NoRecursion, und der aktuelle Thread hat die Sperre bereits erhalten.

- oder -

Der aktuelle Thread befindet sich bereits im Lesemodus, sodass durch eine Zuweisung des Schreibmodus die Möglichkeit eines Deadlocks entstehen würde.

- oder -

Die Anzahl von Rekursionen würde die Kapazität des Zählers überschreiten. Die Kapazität ist so groß, dass Anwendungen diese Grenze niemals erreichen dürften.

Der Wert von millisecondsTimeout ist negativ, aber ungleich Infinite (-1), der den einzigen zulässigen negativen Wert darstellt.

Das ReaderWriterLockSlim -Objekt wurde verworfen.

Beispiele

Das folgende Beispiel zeigt, wie Sie die TryEnterWriteLock -Methode verwenden, um die Sperre im Schreibmodus mit einem Timeout zu öffnen. 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 in die Sperre eintritt, 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. Ein finally -Block wird verwendet, um die ExitWriteLock -Methode auszuführen, um sicherzustellen, dass der Aufrufer die Sperre beendet.

Dieser Code ist Teil eines größeren Beispiels für die ReaderWriterLockSlim -Klasse.

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 sofort zurück false , wenn der gewünschte Zustand nicht verfügbar ist.

Wenn andere Threads im Lesemodus in die Sperre eingetreten sind, blockiert ein Thread, der die TryEnterWriteLock -Methode aufruft, bis diese Threads den Lesemodus beendet haben oder bis das Timeoutintervall abgelaufen ist. Während Threads blockiert werden, die darauf warten, in den Schreibmodus zu gelangen, blockieren zusätzliche Threads, die versuchen, in den Lesemodus oder in den upgradebaren Modus zu wechseln, bis alle Threads, die auf den Schreibmodus warten, entweder ein Timeout oder in den Schreibmodus eingetreten sind und dann beendet wurden.

Hinweis

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

Gilt für:

TryEnterWriteLock(TimeSpan)

Quelle:
ReaderWriterLockSlim.cs
Quelle:
ReaderWriterLockSlim.cs
Quelle:
ReaderWriterLockSlim.cs

Versucht, die Sperre im Schreibmodus zu erhalten. Optional wird ein Timeout berücksichtigt.

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 Zeitintervall bis zum Timeout, oder -1 Millisekunden, um unbegrenzt zu warten.

Gibt zurück

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

Ausnahmen

Die RecursionPolicy-Eigenschaft ist NoRecursion, und der aktuelle Thread hat die Sperre bereits erhalten.

- oder -

Der aktuelle Thread befindet sich bereits im Lesemodus, sodass durch eine Zuweisung des Schreibmodus die Möglichkeit eines Deadlocks entstehen würde.

- oder -

Die Anzahl von Rekursionen würde die Kapazität des Zählers überschreiten. Die Kapazität ist so groß, dass Anwendungen diese Grenze niemals erreichen dürften.

Der Wert von timeout ist negativ, aber ungleich -1 Millisekunden. (Dies ist der einzige zulässige negative Wert.)

- oder -

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

Das ReaderWriterLockSlim -Objekt wurde verworfen.

Hinweise

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

Wenn andere Threads im Lesemodus in die Sperre eingetreten sind, blockiert ein Thread, der die TryEnterWriteLock -Methode aufruft, bis diese Threads den Lesemodus beendet haben oder bis das Timeoutintervall abgelaufen ist. Während Threads blockiert werden, die darauf warten, in den Schreibmodus zu gelangen, blockieren zusätzliche Threads, die versuchen, in den Lesemodus oder in den upgradebaren Modus zu wechseln, bis alle Threads, die auf den Schreibmodus warten, entweder ein Timeout oder in den Schreibmodus eingetreten sind und dann beendet wurden.

Hinweis

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

Gilt für: