게으른 < > (bool) 생성자에 대한 Microsoft의 설명서를 읽는 것이 혼란 스럽습니다.게으른 <T> (bool) 생성자 설명서
isThreadSafe :
파라미터는 다음과 같이 설명하는 다수의 스레드가 동시에 가능한 인스턴스를 만들기 위해 참; 한 번에 하나의 스레드에서만 인스턴스를 사용할 수 있도록하려면 false입니다.
내가 일반적 접근에 작성합니다 코드가있는 경우 :
If _rulesCache Is Nothing Then
SyncLock (_lockRulesCache)
If _rulesCache Is Nothing Then
_rulesCache = New RulesCache()
End If
End SyncLock
End If
Return _rulesCache
나는 게으른 타입의 생성자에서 참 또는 거짓 사용 하시겠습니까?
Private _rulesCache As New Lazy(Of RulesCache)(**?**)
그래서 내 접근이된다 : 객체가 생성되면
Return _rulesCache.Value
1), 내부적으로 다중 스레드 액세스를 처리 할 수 있습니다.
2) 접근자를 동시에 타격하는 스레드가 여러 개 있고 객체가 존재하지 않는다면 객체가 한 번만 생성된다는 것을 확인하면됩니다.
설명서에 따르면 문 1은 매개 변수가 거짓이어야 함을 나타냅니다. 문 2는 매개 변수가 참이어야 함을 의미합니다.
나는 이것을 과장 생각하고있어 혼란 스럽다. 또는 위의 두 문장이 실제로 서로 승률이 같지 않으므로 객체 인스턴스화를 관리하기 위해 수동 잠금을 고수해야합니다.
그래서 isThreadSafe 값을 Lazy 인스턴스가 동시에 (true) 동시에 인스턴스화하려고하는 여러 스레드를 예상하고 처리해야하는지 아니면 단일 스레드 환경에서만 사용되고 있는지 최적화 된 코드를 사용할 수 있는지 여부를 해석해야합니다 단일의 thread가 그것을 인스턴스화합니다 (false). 예? – ulty4life
예, 정확한 요약입니다. – mquander