ReaderWriterLockSlim.TryEnterWriteLock Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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.