ReaderWriterLockSlim.TryEnterWriteLock Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Intenta entrar en el bloqueo en modo de escritura, con tiempo de espera opcional.
Sobrecargas
TryEnterWriteLock(Int32) |
Intenta entrar en el bloqueo en modo de escritura, con tiempo de espera opcional. |
TryEnterWriteLock(TimeSpan) |
Intenta entrar en el bloqueo en modo de escritura, con tiempo de espera opcional. |
TryEnterWriteLock(Int32)
- Source:
- ReaderWriterLockSlim.cs
- Source:
- ReaderWriterLockSlim.cs
- Source:
- ReaderWriterLockSlim.cs
Intenta entrar en el bloqueo en modo de escritura, con tiempo de espera opcional.
public:
bool TryEnterWriteLock(int millisecondsTimeout);
public bool TryEnterWriteLock (int millisecondsTimeout);
member this.TryEnterWriteLock : int -> bool
Public Function TryEnterWriteLock (millisecondsTimeout As Integer) As Boolean
Parámetros
- millisecondsTimeout
- Int32
Número de milisegundos de espera o -1 (Infinite) para esperar indefinidamente.
Devoluciones
true
si el subproceso que realiza la llamada entró en modo de escritura, de lo contrario, false
.
Excepciones
La propiedad RecursionPolicy es NoRecursion y el subproceso actual ya ha entrado en el bloqueo.
o bien
El subproceso actual entró inicialmente en el bloqueo en modo de lectura y, por lo tanto, al intentar entrar en modo de escritura, existiría la posibilidad de un interbloqueo.
o bien
El número de recursividad superaría la capacidad del contador. El límite es tan amplio que las aplicaciones nunca deben alcanzarlo.
El valor de millisecondsTimeout
es negativo, pero no es igual que Infinite (-1), que es el único valor negativo permitido.
Se eliminó el objeto ReaderWriterLockSlim.
Ejemplos
En el ejemplo siguiente se muestra cómo usar el TryEnterWriteLock método para entrar en el bloqueo en modo de escritura, con un tiempo de espera. El método que se muestra en el ejemplo agrega un nuevo par clave-valor a la memoria caché sincronizada. Si el intervalo de tiempo de espera especificado transcurre antes de que el subproceso entre en el bloqueo, el método devuelve false
. El método devuelve true
si se agrega el par clave-valor.
Si la clave ya está en la memoria caché, se permite que la excepción producida por el elemento interno Dictionary<TKey,TValue> finalice el método . Se usa un finally
bloque para ejecutar el ExitWriteLock método, lo que garantiza que el autor de la llamada salga del bloqueo.
Este código forma parte de un ejemplo más grande proporcionado para la ReaderWriterLockSlim clase .
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
Comentarios
Si millisecondsTimeout
es 0 (cero), este método comprueba el estado de bloqueo y devuelve false
inmediatamente si el estado deseado no está disponible.
Si otros subprocesos han entrado en el bloqueo en modo de lectura, un subproceso que llama al TryEnterWriteLock método se bloquea hasta que esos subprocesos hayan salido del modo de lectura o hasta que haya transcurrido el intervalo de tiempo de espera. Mientras los subprocesos están bloqueados en espera de entrar en modo de escritura, los subprocesos adicionales que intentan entrar en modo de lectura o el bloque de modo actualizable hasta que todos los subprocesos que esperan entrar en modo de escritura han agotado el tiempo de espera o han entrado en modo de escritura y, a continuación, se han salido de él.
Nota
Si un bloqueo permite la recursividad, un subproceso que ha entrado en el bloqueo en modo de escritura puede entrar en modo de escritura de forma recursiva, incluso si otros subprocesos están esperando entrar en modo de escritura.
Se aplica a
TryEnterWriteLock(TimeSpan)
- Source:
- ReaderWriterLockSlim.cs
- Source:
- ReaderWriterLockSlim.cs
- Source:
- ReaderWriterLockSlim.cs
Intenta entrar en el bloqueo en modo de escritura, con tiempo de espera opcional.
public:
bool TryEnterWriteLock(TimeSpan timeout);
public bool TryEnterWriteLock (TimeSpan timeout);
member this.TryEnterWriteLock : TimeSpan -> bool
Public Function TryEnterWriteLock (timeout As TimeSpan) As Boolean
Parámetros
- timeout
- TimeSpan
Intervalo de espera, o -1 milisegundo para esperar indefinidamente.
Devoluciones
true
si el subproceso que realiza la llamada entró en modo de escritura, de lo contrario, false
.
Excepciones
La propiedad RecursionPolicy es NoRecursion y el subproceso actual ya ha entrado en el bloqueo.
o bien
El subproceso actual entró inicialmente en el bloqueo en modo de lectura y, por lo tanto, al intentar entrar en modo de escritura, existiría la posibilidad de un interbloqueo.
o bien
El número de recursividad superaría la capacidad del contador. El límite es tan amplio que las aplicaciones nunca deben alcanzarlo.
El valor de timeout
es negativo, pero no es igual a -1 milisegundo, que es el único valor negativo permitido.
o bien
El valor de timeout
es mayor que Int32.MaxValue milisegundos.
Se eliminó el objeto ReaderWriterLockSlim.
Comentarios
Si timeout
es 0 (cero), este método comprueba el estado de bloqueo y devuelve false
inmediatamente si el estado deseado no está disponible.
Si otros subprocesos han entrado en el bloqueo en modo de lectura, un subproceso que llama al TryEnterWriteLock método se bloquea hasta que esos subprocesos hayan salido del modo de lectura o hasta que haya transcurrido el intervalo de tiempo de espera. Mientras los subprocesos están bloqueados en espera de entrar en modo de escritura, los subprocesos adicionales que intentan entrar en modo de lectura o el bloque de modo actualizable hasta que todos los subprocesos que esperan entrar en modo de escritura han agotado el tiempo de espera o han entrado en modo de escritura y, a continuación, se han salido de él.
Nota
Si un bloqueo permite la recursividad, un subproceso que ha entrado en el bloqueo en modo de escritura puede entrar en modo de escritura de forma recursiva, incluso si otros subprocesos están esperando entrar en modo de escritura.