RouteCollection.GetReadLock Метод

Определение

Предоставляет объект для управления потокобезопасностью при извлечении объекта из коллекции.

public:
 IDisposable ^ GetReadLock();
public IDisposable GetReadLock ();
member this.GetReadLock : unit -> IDisposable
Public Function GetReadLock () As IDisposable

Возвращаемое значение

IDisposable

Объект, который управляет потокобезопасностью.

Примеры

В следующем примере показано, как использовать GetReadLock метод при получении маршрута во время выполнения приложения. Инструкция Using гарантирует, что независимо от того, что происходит во время выполнения при чтении из коллекции (выполняется ли код обычно или возникает исключение), блокировка будет безопасно освобождена в конце Using блока кода.

Комментарии

Объект RouteCollection доступен для нескольких процессов в приложении. Таким образом, если необходимо получить маршрут при запуске приложения, используйте GetReadLock метод, чтобы гарантировать безопасность потоков. Получив блокировку чтения для коллекции маршрутов, убедитесь, что коллекция не будет изменена при попытке получить ее.

Метод GetReadLock останавливает продолжение потока до тех пор, пока блокировка не будет получена. Если блокировка записи выполняется, поток ожидает завершения обновления и освобождения блокировки записи. Блокировка чтения коллекции маршрутов освобождается при IDisposable удалении объекта, возвращаемого этим методом.

Если вы не используете GetReadLock, при чтении RouteCollection коллекции может возникнуть ошибка. Например, предположим, что вы выполняете цикл по объектам в RouteCollection коллекции, чтобы прочитать их, не вызывая GetReadLock. При этом другой поток из другого запроса может вызвать GetWriteLock и добавить в коллекцию маршрут. Затем первый поток завершится ошибкой.

Существует два сценария, в которых не требуется вызывать:GetReadLock

  • Открытые методы класса, такие как GetVirtualPath и внутренние вызовы.RouteCollection GetReadLock GetRouteData Поэтому при вызове открытого RouteCollection метода класса для получения данных из коллекции не требуется явным образом вызыватьсяGetReadLock.

  • Когда приложение запускается и еще не обрабатывает запросы, например в обработчике Application_Start событий, выполняется только один поток. Так как при чтении коллекции нет других потоков, вам не нужно вызывать GetReadLock.

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

См. также раздел