ReaderWriterLockSlim.TryEnterWriteLock Methode

Definitie

Probeert de vergrendeling in de schrijfmodus in te voeren, met een optionele time-out.

Overloads

Name Description
TryEnterWriteLock(Int32)

Probeert de vergrendeling in de schrijfmodus in te voeren, met een optionele time-out.

TryEnterWriteLock(TimeSpan)

Probeert de vergrendeling in de schrijfmodus in te voeren, met een optionele time-out.

TryEnterWriteLock(Int32)

Bron:
ReaderWriterLockSlim.cs
Bron:
ReaderWriterLockSlim.cs
Bron:
ReaderWriterLockSlim.cs
Bron:
ReaderWriterLockSlim.cs
Bron:
ReaderWriterLockSlim.cs

Probeert de vergrendeling in de schrijfmodus in te voeren, met een optionele time-out.

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

Parameters

millisecondsTimeout
Int32

Het aantal milliseconden dat moet worden gewacht, of -1 (Infinite) om voor onbepaalde tijd te wachten.

Retouren

trueals de aanroepende thread de schrijfmodus heeft ingevoerd, anders. false

Uitzonderingen

De RecursionPolicy eigenschap is NoRecursion en de huidige thread heeft de vergrendeling al ingevoerd.

– of –

De huidige thread heeft in eerste instantie de vergrendeling in de leesmodus ingevoerd en daarom wordt geprobeerd om de schrijfmodus in te voeren de mogelijkheid van een impasse.

– of –

Het recursienummer overschrijdt de capaciteit van de teller. De limiet is zo groot dat toepassingen deze nooit mogen tegenkomen.

De waarde is millisecondsTimeout negatief, maar is niet gelijk aan Infinite (-1), wat de enige negatieve waarde is die is toegestaan.

Het ReaderWriterLockSlim object is verwijderd.

Voorbeelden

In het volgende voorbeeld ziet u hoe u de TryEnterWriteLock methode gebruikt om de vergrendeling in de schrijfmodus in te voeren, met een time-out. Met de methode die in het voorbeeld wordt weergegeven, wordt een nieuw sleutel-/waardepaar toegevoegd aan de gesynchroniseerde cache. Als het opgegeven time-outinterval verstreken is voordat de thread de vergrendeling binnenkomt, retourneert falsede methode . De methode retourneert true als het sleutel-/waardepaar wordt toegevoegd.

Als de sleutel zich al in de cache bevindt, mag de door de binnenste gegenereerde Dictionary<TKey,TValue> uitzondering de methode beëindigen. Er wordt een finally blok gebruikt om de ExitWriteLock methode uit te voeren, zodat de aanroeper de vergrendeling afsluit.

Deze code maakt deel uit van een groter voorbeeld voor de 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

Opmerkingen

Als millisecondsTimeout 0 (nul) is, controleert deze methode de vergrendelingsstatus false en wordt onmiddellijk geretourneerd als de gewenste status niet beschikbaar is.

Als andere threads de vergrendeling in de leesmodus hebben ingevoerd, wordt een thread die de TryEnterWriteLock methodeblokken aanroept totdat deze threads de leesmodus hebben afgesloten of totdat het time-outinterval is verstreken. Hoewel threads worden geblokkeerd totdat ze de schrijfmodus openen, zijn er extra threads die proberen de leesmodus of het upgradebare modusblok in te voeren, geblokkeerd totdat alle threads die wachten om in de schrijfmodus te komen, een time-out hebben opgetreden of de schrijfmodus zijn geactiveerd en vervolgens worden afgesloten.

Note

Als een vergrendeling recursie toestaat, kan een thread die de vergrendeling in de schrijfmodus heeft ingevoerd recursief de schrijfmodus inschakelen, zelfs als andere threads wachten om de schrijfmodus in te voeren.

Van toepassing op

TryEnterWriteLock(TimeSpan)

Bron:
ReaderWriterLockSlim.cs
Bron:
ReaderWriterLockSlim.cs
Bron:
ReaderWriterLockSlim.cs
Bron:
ReaderWriterLockSlim.cs
Bron:
ReaderWriterLockSlim.cs

Probeert de vergrendeling in de schrijfmodus in te voeren, met een optionele time-out.

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

Parameters

timeout
TimeSpan

Het interval dat moet worden gewacht of -1 milliseconden om voor onbepaalde tijd te wachten.

Retouren

trueals de aanroepende thread de schrijfmodus heeft ingevoerd, anders. false

Uitzonderingen

De RecursionPolicy eigenschap is NoRecursion en de huidige thread heeft de vergrendeling al ingevoerd.

– of –

De huidige thread heeft in eerste instantie de vergrendeling in de leesmodus ingevoerd en daarom wordt geprobeerd om de schrijfmodus in te voeren de mogelijkheid van een impasse.

– of –

Het recursienummer overschrijdt de capaciteit van de teller. De limiet is zo groot dat toepassingen deze nooit mogen tegenkomen.

De waarde is timeout negatief, maar is niet gelijk aan -1 milliseconden, wat de enige negatieve waarde is die is toegestaan.

– of –

De waarde van timeout is groter dan Int32.MaxValue milliseconden.

Het ReaderWriterLockSlim object is verwijderd.

Opmerkingen

Als timeout 0 (nul) is, controleert deze methode de vergrendelingsstatus false en wordt onmiddellijk geretourneerd als de gewenste status niet beschikbaar is.

Als andere threads de vergrendeling in de leesmodus hebben ingevoerd, wordt een thread die de TryEnterWriteLock methodeblokken aanroept totdat deze threads de leesmodus hebben afgesloten of totdat het time-outinterval is verstreken. Hoewel threads worden geblokkeerd totdat ze de schrijfmodus openen, zijn er extra threads die proberen de leesmodus of het upgradebare modusblok in te voeren, geblokkeerd totdat alle threads die wachten om in de schrijfmodus te komen, een time-out hebben opgetreden of de schrijfmodus zijn geactiveerd en vervolgens worden afgesloten.

Note

Als een vergrendeling recursie toestaat, kan een thread die de vergrendeling in de schrijfmodus heeft ingevoerd recursief de schrijfmodus inschakelen, zelfs als andere threads wachten om de schrijfmodus in te voeren.

Van toepassing op