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 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.