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


RouteCollection.GetReadLock Метод

Определение

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

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

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

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

Примеры

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

Комментарии

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

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

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

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

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

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

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

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