RouteCollection.GetReadLock 메서드

정의

컬렉션에서 개체를 검색할 때 스레드 보안을 관리하기 위한 개체를 제공합니다.

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

반품

스레드 보안을 관리하는 개체입니다.

예제

다음 예제에서는 애플리케이션을 GetReadLock 실행 하는 동안 경로를 검색할 때 메서드를 사용 하는 방법을 보여 집니다. 이 문은 Using 컬렉션에서 읽을 때 런타임에 어떤 일이 발생하든(코드가 정상적으로 완료되는지 아니면 예외가 throw되든) 코드 블록의 Using 끝에 잠금이 안전하게 해제되도록 합니다.

설명

개체는 RouteCollection 애플리케이션의 여러 프로세스에서 사용할 수 있습니다. 따라서 애플리케이션이 실행 중일 때 경로를 검색해야 하는 경우 스레드 안전을 보장하기 위해 이 메서드를 사용합니다 GetReadLock . 경로 컬렉션에 대한 읽기 잠금을 가져와서 검색하는 동안 컬렉션이 수정되지 않도록 합니다.

이 메서드는 GetReadLock 잠금을 획득할 수 있을 때까지 스레드가 계속되지 않도록 중지합니다. 쓰기 잠금이 있는 경우 스레드는 업데이트가 완료되고 쓰기 잠금이 해제될 때까지 기다립니다. 이 메서드에서 반환된 개체가 삭제되면 경로 컬렉션에 IDisposable 대한 읽기 잠금이 해제됩니다.

사용하지 GetReadLock않으면 컬렉션을 읽 RouteCollection 는 동안 오류가 발생할 수 있습니다. 예를 들어 컬렉션의 개체 RouteCollection 를 반복하여 호출 GetReadLock하지 않고 읽는 경우를 가정해 보겠습니다. 이 작업을 수행하는 동안 다른 요청의 다른 스레드가 컬렉션에 대한 경로를 호출 GetWriteLock 하고 추가할 수 있습니다. 그러면 첫 번째 스레드가 오류와 함께 실패합니다.

호출 GetReadLock할 필요가 없는 두 가지 시나리오가 있습니다.

  • 클래스의 RouteCollection 공용 메서드(예: GetVirtualPathGetRouteData 내부적으로 호출 GetReadLock )입니다. 따라서 컬렉션에서 데이터를 검색하기 위해 클래스의 GetReadLock public 메서드를 호출할 때 명시적으로 호출 RouteCollection 할 필요가 없습니다.

  • 애플리케이션이 시작 중이고 이벤트 처리기와 같은 Application_Start 요청을 아직 처리하지 않는 경우 하나의 스레드만 실행되고 있습니다. 컬렉션을 읽는 동안 컬렉션을 업데이트할 수 있는 다른 스레드가 없으므로 호출 GetReadLock할 필요가 없습니다.

적용 대상

추가 정보