ReaderWriterLockSlim.TryEnterWriteLock Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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.