Поделиться через


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 метод, блокируется до выхода этих потоков из режима чтения или до истечения интервала ожидания. В то время как потоки блокируются, ожидающие перехода в режим записи, дополнительные потоки, которые пытаются войти в режим чтения или обновляемый режим, блокируются до тех пор, пока все потоки, ожидающие перехода в режим записи, либо не перешло в режим записи, а затем не выйдет из него.

Примечание

Если блокировка допускает рекурсию, поток, который вступил в блокировку в режиме записи, может перейти в режим записи рекурсивно, даже если другие потоки ожидают выхода в режим записи.

Применяется к