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.