ReaderWriterLockSlim.TryEnterWriteLock Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Пытается войти в блокировку в режиме записи с необязательным указанием времени ожидания.
Перегрузки
TryEnterWriteLock(Int32) |
Пытается войти в блокировку в режиме записи с необязательным указанием времени ожидания. |
TryEnterWriteLock(TimeSpan) |
Пытается войти в блокировку в режиме записи с необязательным указанием времени ожидания. |
TryEnterWriteLock(Int32)
- Исходный код:
- ReaderWriterLockSlim.cs
- Исходный код:
- ReaderWriterLockSlim.cs
- Исходный код:
- ReaderWriterLockSlim.cs
Пытается войти в блокировку в режиме записи с необязательным указанием времени ожидания.
public:
bool TryEnterWriteLock(int millisecondsTimeout);
public bool TryEnterWriteLock (int millisecondsTimeout);
member this.TryEnterWriteLock : int -> bool
Public Function TryEnterWriteLock (millisecondsTimeout As Integer) As Boolean
Параметры
- millisecondsTimeout
- Int32
Время ожидания в миллисекундах или -1 (Infinite) в случае неограниченного времени ожидания.
Возвращаемое значение
Значение true
, если вызывающий поток вошел в режим записи, иначе — false
.
Исключения
Свойство RecursionPolicy имеет значение NoRecursion, а текущий поток уже вошел в блокировку.
-или-
Текущий поток изначально вошел в блокировку в режиме чтения, поэтому попытка войти в режим записи создаст возможность взаимоблокировки.
-или-
Глубина рекурсии превышает емкость счетчика. Ограничение допускает настолько большое число рекурсивных вхождений, что оно не должно достигаться приложениями на практике.
Значение параметра millisecondsTimeout
меньше нуля, но не равно Infinite (-1), которое является единственным допустимым отрицательным значением.
Объект ReaderWriterLockSlim был удален.
Примеры
В следующем примере показано, как использовать TryEnterWriteLock метод для ввода блокировки в режиме записи с истечением времени ожидания. Метод, показанный в примере, добавляет новую пару "ключ-значение" в синхронизированный кэш. Если указанный интервал времени ожидания истекает до того, как поток войдет в блокировку, метод возвращает false
. Метод возвращает значение true
, если добавляется пара "ключ-значение".
Если ключ уже находится в кэше, исключение, создаваемое внутренним Dictionary<TKey,TValue> элементом, может завершить метод . Блок finally
используется для выполнения ExitWriteLock метода , гарантируя, что вызывающий объект выходит из блокировки.
Этот код является частью более крупного примера, предоставленного ReaderWriterLockSlim для класса .
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
Комментарии
Если millisecondsTimeout
значение равно 0 (ноль), этот метод проверяет состояние блокировки и возвращает немедленно, false
если требуемое состояние недоступно.
Если другие потоки вступили в блокировку в режиме чтения, поток, вызывающий TryEnterWriteLock метод, блокируется до выхода этих потоков из режима чтения или до истечения интервала ожидания. В то время как потоки блокируются, ожидающие перехода в режим записи, дополнительные потоки, которые пытаются войти в режим чтения или обновляемый режим, блокируются до тех пор, пока все потоки, ожидающие перехода в режим записи, либо не перешло в режим записи, а затем не выйдет из него.
Примечание
Если блокировка допускает рекурсию, поток, который вступил в блокировку в режиме записи, может перейти в режим записи рекурсивно, даже если другие потоки ожидают выхода в режим записи.
Применяется к
TryEnterWriteLock(TimeSpan)
- Исходный код:
- ReaderWriterLockSlim.cs
- Исходный код:
- ReaderWriterLockSlim.cs
- Исходный код:
- ReaderWriterLockSlim.cs
Пытается войти в блокировку в режиме записи с необязательным указанием времени ожидания.
public:
bool TryEnterWriteLock(TimeSpan timeout);
public bool TryEnterWriteLock (TimeSpan timeout);
member this.TryEnterWriteLock : TimeSpan -> bool
Public Function TryEnterWriteLock (timeout As TimeSpan) As Boolean
Параметры
- timeout
- TimeSpan
Период ожидания или значение -1 миллисекунда для ожидания в течение неограниченного времени.
Возвращаемое значение
Значение true
, если вызывающий поток вошел в режим записи, иначе — false
.
Исключения
Свойство RecursionPolicy имеет значение NoRecursion, а текущий поток уже вошел в блокировку.
-или-
Текущий поток изначально вошел в блокировку в режиме чтения, поэтому попытка войти в режим записи создаст возможность взаимоблокировки.
-или-
Глубина рекурсии превышает емкость счетчика. Ограничение допускает настолько большое число рекурсивных вхождений, что оно не должно достигаться приложениями на практике.
Значение параметра timeout
отрицательное, но оно не равно -1 миллисекунде, которое является единственным допустимым отрицательным значением.
-или-
Значение больше, чем Int32.MaxValue в миллисекундахtimeout
.
Объект ReaderWriterLockSlim был удален.
Комментарии
Если timeout
значение равно 0 (ноль), этот метод проверяет состояние блокировки и возвращает немедленно, false
если требуемое состояние недоступно.
Если другие потоки вступили в блокировку в режиме чтения, поток, вызывающий TryEnterWriteLock метод, блокируется до выхода этих потоков из режима чтения или до истечения интервала ожидания. В то время как потоки блокируются, ожидающие перехода в режим записи, дополнительные потоки, которые пытаются войти в режим чтения или обновляемый режим, блокируются до тех пор, пока все потоки, ожидающие перехода в режим записи, либо не перешло в режим записи, а затем не выйдет из него.
Примечание
Если блокировка допускает рекурсию, поток, который вступил в блокировку в режиме записи, может перейти в режим записи рекурсивно, даже если другие потоки ожидают выхода в режим записи.