Partager via


ReaderWriterLockSlim.TryEnterWriteLock Méthode

Définition

Essaie d'entrer le verrou en mode écriture, avec un délai d'attente facultatif.

Surcharges

TryEnterWriteLock(Int32)

Essaie d'entrer le verrou en mode écriture, avec un délai d'attente facultatif.

TryEnterWriteLock(TimeSpan)

Essaie d'entrer le verrou en mode écriture, avec un délai d'attente facultatif.

TryEnterWriteLock(Int32)

Source:
ReaderWriterLockSlim.cs
Source:
ReaderWriterLockSlim.cs
Source:
ReaderWriterLockSlim.cs

Essaie 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 Infinite (-1) pour un délai d'attente infini.

Retours

true si le thread appelant est entré en mode écriture, sinon, false.

Exceptions

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

- ou -

Le thread actuel a entré à l'origine le verrou en mode lecture et par conséquent, une tentative d'entrer en mode écriture risquerait de créer un interblocage.

- ou -

Le nombre de récursivités dépasserait la capacité du compteur. Cette limite est si élevée que les applications ne doivent jamais la rencontrer.

La valeur de millisecondsTimeout est négative, mais différente de 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’expiration. 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 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 sont entrés dans le verrou en mode lecture, un thread qui appelle la TryEnterWriteLock méthode se bloque jusqu’à ce que ces threads aient quitté le mode de lecture ou jusqu’à ce que l’intervalle de délai d’expiration soit écoulé. Alors que les threads sont bloqués en attendant d’entrer en mode écriture, les threads supplémentaires qui tentent d’entrer en mode lecture ou en mode pouvant être mis à niveau bloquent jusqu’à ce que tous les threads qui attendent d’entrer en mode écriture ont expiré ou entré en mode écriture, puis ont quitté celui-ci.

Notes

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

S’applique à

TryEnterWriteLock(TimeSpan)

Source:
ReaderWriterLockSlim.cs
Source:
ReaderWriterLockSlim.cs
Source:
ReaderWriterLockSlim.cs

Essaie 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 d'attente, ou -1 milliseconde pour un délai d'attente infini.

Retours

true si le thread appelant est entré en mode écriture, sinon, false.

Exceptions

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

- ou -

Le thread actuel a entré à l'origine le verrou en mode lecture et par conséquent, une tentative d'entrer en mode écriture risquerait de créer un interblocage.

- ou -

Le nombre de récursivités dépasserait la capacité du compteur. Cette limite est si élevée que les applications ne doivent jamais la rencontrer.

La valeur de timeout est négative, mais différente de -1 millisecondes, qui est la seule valeur négative autorisée.

- ou -

La valeur de timeout est supérieure à int32.MaxValue millisecondes.

L’objet ReaderWriterLockSlim a été supprimé.

Remarques

Si timeout 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 sont entrés dans le verrou en mode lecture, un thread qui appelle la TryEnterWriteLock méthode se bloque jusqu’à ce que ces threads aient quitté le mode de lecture ou jusqu’à ce que l’intervalle de délai d’expiration soit écoulé. Alors que les threads sont bloqués en attendant d’entrer en mode écriture, les threads supplémentaires qui tentent d’entrer en mode lecture ou en mode pouvant être mis à niveau bloquent jusqu’à ce que tous les threads qui attendent d’entrer en mode écriture ont expiré ou entré en mode écriture, puis ont quitté celui-ci.

Notes

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

S’applique à