ReaderWriterLockSlim.TryEnterWriteLock Méthode

Définition

Tente d’entrer le verrou en mode écriture, avec un délai d’attente facultatif.

Surcharges

Nom Description
TryEnterWriteLock(Int32)

Tente d’entrer le verrou en mode écriture, avec un délai d’attente facultatif.

TryEnterWriteLock(TimeSpan)

Tente d’entrer le verrou en mode écriture, avec un délai d’attente facultatif.

TryEnterWriteLock(Int32)

Tente d’entrer le verrou en mode écriture, avec un délai d’attente facultatif.

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

Paramètres

millisecondsTimeout
Int32

Nombre de millisecondes à attendre, ou -1 (Infinite) d’attendre indéfiniment.

Retours

truesi le thread appelant est entré en mode d’écriture ; sinon. false

Exceptions

La RecursionPolicy propriété est NoRecursion et le thread actuel a déjà entré le verrou.

-ou-

Le thread actuel a initialement entré le verrou en mode lecture et, par conséquent, essayer d’entrer en mode écriture créerait la possibilité d’un interblocage.

-ou-

Le nombre de récursivité dépasse la capacité du compteur. La limite est si grande que les applications ne doivent jamais les rencontrer.

La valeur est millisecondsTimeout négative, mais elle n’est pas égale à Infinite (-1), qui est la seule valeur négative autorisée.

L’objet ReaderWriterLockSlim a été supprimé.

Exemples

L’exemple suivant montre comment utiliser la TryEnterWriteLock méthode pour entrer le verrou en mode écriture, avec un délai d’attente. La méthode illustrée dans l’exemple ajoute une nouvelle paire clé/valeur au cache synchronisé. Si l’intervalle de délai d’attente spécifié s’écoule avant que le thread entre dans le verrou, la méthode retourne false. La méthode retourne true si la paire clé/valeur est ajoutée.

Si la clé se trouve déjà dans le cache, l’exception levée par l’interne Dictionary<TKey,TValue> est autorisée à arrêter la méthode. Un finally bloc est utilisé pour exécuter la ExitWriteLock méthode, ce qui garantit que l’appelant quitte le verrou.

Ce code fait partie d’un exemple plus large fourni pour la ReaderWriterLockSlim classe.

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

Remarques

Si millisecondsTimeout la valeur est 0 (zéro), cette méthode vérifie l’état de verrouillage et retourne false immédiatement si l’état souhaité n’est pas disponible.

Si d’autres threads ont entré le verrou en mode lecture, un thread qui appelle les TryEnterWriteLock blocs de méthode jusqu’à ce que ces threads aient quitté le mode lecture ou jusqu’à ce que l’intervalle de délai d’attente soit écoulé. Pendant que les threads sont bloqués en attente d’entrer en mode écriture, des threads supplémentaires qui essaient d’entrer en mode lecture ou en mode mise à niveau jusqu’à ce que tous les threads en attente d’entrer en mode écriture aient expiré ou entré en mode écriture, puis se sont arrêtés.

Note

Si un verrou autorise la récursivité, un thread qui a entré le verrou en mode écriture peut entrer en mode écriture de manière récursive, même si d’autres threads attendent d’entrer en mode écriture.

S’applique à

TryEnterWriteLock(TimeSpan)

Tente d’entrer le verrou en mode écriture, avec un délai d’attente facultatif.

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

Paramètres

timeout
TimeSpan

Intervalle à attendre, ou -1 millisecondes pour attendre indéfiniment.

Retours

truesi le thread appelant est entré en mode d’écriture ; sinon. false

Exceptions

La RecursionPolicy propriété est NoRecursion et le thread actuel a déjà entré le verrou.

-ou-

Le thread actuel a initialement entré le verrou en mode lecture et, par conséquent, essayer d’entrer en mode écriture créerait la possibilité d’un interblocage.

-ou-

Le nombre de récursivité dépasse la capacité du compteur. La limite est si grande que les applications ne doivent jamais les rencontrer.

La valeur est timeout négative, mais elle n’est pas égale à -1 millisecondes, qui est la seule valeur négative autorisée.

-ou-

La valeur est timeout supérieure à Int32.MaxValue millisecondes.

L’objet ReaderWriterLockSlim a été supprimé.

Remarques

Si timeout la valeur est 0 (zéro), cette méthode vérifie l’état de verrouillage et retourne false immédiatement si l’état souhaité n’est pas disponible.

Si d’autres threads ont entré le verrou en mode lecture, un thread qui appelle les TryEnterWriteLock blocs de méthode jusqu’à ce que ces threads aient quitté le mode lecture ou jusqu’à ce que l’intervalle de délai d’attente soit écoulé. Pendant que les threads sont bloqués en attente d’entrer en mode écriture, des threads supplémentaires qui essaient d’entrer en mode lecture ou en mode mise à niveau jusqu’à ce que tous les threads en attente d’entrer en mode écriture aient expiré ou entré en mode écriture, puis se sont arrêtés.

Note

Si un verrou autorise la récursivité, un thread qui a entré le verrou en mode écriture peut entrer en mode écriture de manière récursive, même si d’autres threads attendent d’entrer en mode écriture.

S’applique à