다음을 통해 공유


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

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

  • 및 와 GetRouteData 같은 GetVirtualPath 클래스의 RouteCollection 공용 메서드는 내부적으로 호출 GetReadLock 합니다. 따라서 컬렉션에서 데이터를 검색하기 위해 클래스의 RouteCollection public 메서드를 호출할 때 명시적으로 를 호출 GetReadLock 할 필요가 없습니다.

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

적용 대상

추가 정보