이 페이지가 유용했습니까?
이 콘텐츠에 대한 여러분의 의견은 중요합니다. 의견을 알려주십시오.
추가 의견
1500자 남음
내보내기(0) 인쇄
모두 확장
확장 최소화
이 문서는 기계로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본

LazyThreadSafetyMode 열거형

System.Lazy<T> 인스턴스가 여러 스레드 간 액세스를 동기화하는 방법을 지정합니다.

네임스페이스:  System.Threading
어셈블리:  mscorlib(mscorlib.dll)

public enum LazyThreadSafetyMode

멤버 이름설명
에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETExecutionAndPublication잠금은 단일 스레드만 Lazy<T> 인스턴스를 스레드로부터 안전한 방식으로 초기화할 수 있도록 하는 데 사용됩니다. 초기화 메서드(초기화 메서드가 없는 경우에는 기본 생성자)가 내부적으로 잠금을 사용하는 경우 교착 상태가 발생할 수 있습니다. 초기화 메서드(valueFactory 매개 변수)를 지정하는 Lazy<T> 생성자를 사용하고 Lazy<T>.Value 속성을 처음으로 호출할 때 해당 초기화 메서드가 예외를 throw할 경우(또는 예외 처리에 실패할 경우) 이후에 Lazy<T>.Value 속성을 호출하면 예외가 캐시되고 다시 throw됩니다. 초기화 메서드를 지정하지 않는 Lazy<T> 생성자를 사용할 경우에는 T에 대한 기본 생성자에서 throw되는 예외가 캐시되지 않습니다. 그러한 경우 다음에 Lazy<T>.Value 속성을 호출하면 Lazy<T> 인스턴스가 성공적으로 초기화될 수도 있습니다. 초기화 메서드가 Lazy<T> 인스턴스의 Value 속성에 재귀적으로 액세스하면 InvalidOperationException이 throw됩니다.
에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETNone Lazy<T> 인스턴스는 스레드로부터 안전하지 않으므로 여러 스레드에서 인스턴스에 액세스할 경우 해당 인스턴스의 동작이 정의되지 않습니다. 높은 성능이 중요하고 Lazy<T> 인스턴스가 절대 두 개 이상의 스레드에서 초기화되지 않을 것임이 확실한 경우에만 이 모드를 사용하십시오. 초기화 메서드(valueFactory 매개 변수)를 지정하는 Lazy<T> 생성자를 사용하고 Lazy<T>.Value 속성을 처음으로 호출할 때 해당 초기화 메서드가 예외를 throw할 경우(또는 예외 처리에 실패할 경우) 이후에 Lazy<T>.Value 속성을 호출하면 예외가 캐시되고 다시 throw됩니다. 초기화 메서드를 지정하지 않는 Lazy<T> 생성자를 사용할 경우에는 T에 대한 기본 생성자에서 throw되는 예외가 캐시되지 않습니다. 그러한 경우 다음에 Lazy<T>.Value 속성을 호출하면 Lazy<T> 인스턴스가 성공적으로 초기화될 수도 있습니다. 초기화 메서드가 Lazy<T> 인스턴스의 Value 속성에 재귀적으로 액세스하면 InvalidOperationException이 throw됩니다.
에서 지원 이식 가능한 클래스 라이브러리다음에서 지원: Windows 스토어 앱용 .NETPublicationOnly여러 스레드에서 Lazy<T> 인스턴스를 동시에 초기화하려고 하면 모든 스레드에서 초기화 메서드(초기화 메서드가 없는 경우 기본 생성자)를 실행할 수 있습니다. 초기화를 완료하는 첫 번째 스레드가 Lazy<T> 인스턴스의 값을 설정합니다. 해당 스레드에서 초기화 메서드가 예외를 throw하지 않으면 이 값은 동시에 초기화 메서드를 실행 중이던 다른 모든 스레드에 반환됩니다. 경쟁 스레드에서 만든 T의 인스턴스는 모두 삭제됩니다. 임의의 스레드에서 초기화 메서드가 예외를 throw하면 해당 스레드의 Lazy<T>.Value 속성에서 예외가 전파됩니다. 예외가 캐시되지 않습니다. IsValueCreated 속성의 값이 false로 유지되고 이후에 예외가 throw된 스레드 또는 다른 스레드에서 Value 속성을 호출하면 초기화 메서드가 다시 실행됩니다. 초기화 메서드가 Lazy<T> 인스턴스의 Value 속성에 재귀적으로 액세스하면 예외가 throw되지 않습니다.

이 열거형을 사용하여 Lazy<T> 생성자의 mode 매개 변수를 지정합니다. 스레드 동기화에 대한 모든 생성자의 영향은 생성자에 mode 매개 변수가 있는지 여부와 상관 없이 이 열거형으로 설명할 수 있습니다.

Lazy<T> 인스턴스는 사용자 지정 초기화 메서드 또는 T에 대한 기본 구성자에 의해 초기화됩니다. 초기화 메서드는 Lazy<T> 생성자의 valueFactory 매개 변수에 의해 지정됩니다. 이 메서드는 Lazy<T>의 인스턴스에 의해 지연 초기화되는 형식인 T의 인스턴스를 반환합니다. 생성자에 valueFactory 매개 변수가 없는 경우 T에 대한 기본 생성자는 Lazy<T> 인스턴스를 초기화하는 데 사용됩니다. 어느 경우나 처음 Lazy<T>.Value 속성을 호출하면 초기화가 발생합니다.

Lazy<T> 인스턴스의 스레드 안전을 지정하는 것 이외에도, 이 열거형은 예외 캐싱에 영향을 미칩니다. Lazy<T> 인스턴스에 대해 예외가 캐시되면 인스턴스를 초기화할 기회가 한 번 밖에 없습니다. Lazy<T>.Value 속성을 처음으로 호출할 때 예외가 throw되면 해당 예외가 캐시되고 Lazy<T>.Value 속성에 대한 이후의 모든 호출에 다시 throw됩니다. 예외를 캐싱하는 장점은 오류가 발생하는 경우에도 임의의 두 스레드가 항상 같은 결과를 얻는다는 것입니다.

PublicationOnly 모드를 지정하면 예외가 캐싱되지 않습니다. None 또는 ExecutionAndPublication을 지정하면 캐싱은 초기화 메서드를 지정할지 여부에 따라 달라지거나 사용할 T에 대한 기본 생성자를 허용합니다. 초기화 메서드를 지정하면 이러한 두 모드에 대해 예외 캐싱이 설정됩니다. 초기화 메서드는 매우 간단할 수 있습니다. 예를 들어 C#의 경우 T: new Lazy<Contents>(() => new Contents(), mode) 또는 Visual Basic의 경우 New Lazy(Of Contents)(Function() New Contents())에 대해 기본 생성자를 호출할 수 있습니다. 초기화 메서드를 지정하지 않는 생성자를 사용할 경우에는 T에 대한 기본 생성자에서 throw되는 예외가 캐시되지 않습니다. 다음 표에서는 예외 캐싱 동작을 요약하여 보여 줍니다.

모드

초기화 메서드 사용

T에 대한 기본 생성자 사용

None

캐시됨

캐시되지 않습니다.

PublicationOnly

캐시되지 않습니다.

캐시되지 않습니다.

ExecutionAndPublication

캐시됨

캐시되지 않습니다.

.NET Framework

4.5, 4에서 지원

.NET Framework Client Profile

4에서 지원

이식 가능한 클래스 라이브러리

이식 가능한 클래스 라이브러리에서 지원

Windows 스토어 앱용 .NET

Windows 8에서 지원

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(서버 코어 역할은 지원되지 않음), Windows Server 2008 R2(서버 코어 역할은 SP1 이상에서 지원, Itanium은 지원되지 않음)

.NET Framework 에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 다음을 참조하십시오. .NET Framework 시스템 요구 사항.

커뮤니티 추가 항목

추가
표시:
© 2015 Microsoft