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