ReaderWriterLockSlim.TryEnterWriteLock Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Пытается ввести блокировку в режиме записи с необязательным временем ожидания.
Перегрузки
| Имя | Описание |
|---|---|
| TryEnterWriteLock(Int32) |
Пытается ввести блокировку в режиме записи с необязательным временем ожидания. |
| TryEnterWriteLock(TimeSpan) |
Пытается ввести блокировку в режиме записи с необязательным временем ожидания. |
TryEnterWriteLock(Int32)
- Исходный код:
- ReaderWriterLockSlim.cs
- Исходный код:
- ReaderWriterLockSlim.cs
- Исходный код:
- 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 блоки метода, пока эти потоки не завершились режимом чтения или до истечения интервала времени ожидания. Хотя потоки блокируются, ожидая ввода режима записи, дополнительные потоки, которые пытаются войти в режим чтения или блок режима обновления, пока все потоки, ожидающие ввода режима записи, либо истекли или вошли в режим записи, а затем вышли из него.
Note
Если блокировка разрешает рекурсию, поток, введенный в режим записи, может входить в режим записи рекурсивно, даже если другие потоки ожидают ввода режима записи.
Применяется к
TryEnterWriteLock(TimeSpan)
- Исходный код:
- ReaderWriterLockSlim.cs
- Исходный код:
- ReaderWriterLockSlim.cs
- Исходный код:
- 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 миллисекундам, что является единственным допустимым отрицательным значением.
–или–
Значение timeout больше, чем в миллисекундах Int32.MaxValue .
Объект ReaderWriterLockSlim удален.
Комментарии
Если timeout значение равно 0 (ноль), этот метод проверяет состояние блокировки и возвращается false немедленно, если нужное состояние недоступно.
Если другие потоки ввели блокировку в режиме чтения, поток, вызывающий TryEnterWriteLock блоки метода, пока эти потоки не завершились режимом чтения или до истечения интервала времени ожидания. Хотя потоки блокируются, ожидая ввода режима записи, дополнительные потоки, которые пытаются войти в режим чтения или блок режима обновления, пока все потоки, ожидающие ввода режима записи, либо истекли или вошли в режим записи, а затем вышли из него.
Note
Если блокировка разрешает рекурсию, поток, введенный в режим записи, может входить в режим записи рекурсивно, даже если другие потоки ожидают ввода режима записи.