List (TValue)와 같은 IEnumerable이 있다고 가정하고이 목록의 액세스 여부를 추적하고 싶습니다 (다른 스레드에서 반복되는 동안 목록에 추가하는 문제를 방지하기 위해) ; 나는 항상 다음과 같은 코드를 작성할 수 있습니다 :For Each 루프를 사용하여 IEnumerable에 액세스 중인지 확인하는 방법이 있습니까?
Dim List1 As New List(Of Integer)
Dim IteratingList1 As Boolean = False
' ... some code ... '
Private Function getSumOfPositivesFromList1() As Integer
If IteratingList1 Then Return -1
IteratingList1 = True
Dim SumOfPositives As Integer = 0
For Each x As Integer In List1
If x > 0 Then SumOfPositives += x
Next
IteratingList1 = False
Return SumOfPositives
End Function
(이 코드는 매우 임의 실현,하지만 무슨 말인지 보여줍니다.)
내 질문은 더 나은/청소기가 있는지 여부입니다 방법은 위와 같이 부울을 수동으로 업데이트하고 액세스하는 것보다이 검사를 수행하는 것입니다. 거기에 있어야하는 것처럼 느껴지지만 내 지식으로는 IEnumerable 클래스에는 내장 된 "나는 반복되고있다"라는 메서드 나 속성이 없습니다. 그리고 IEnumerable을 구현하고 그러한 속성을 포함하는 새로운 클래스를 작성하는 것은 나에게 잔인한 것처럼 보입니다.
고마워요! 전에 SyncLock에 익숙하지 않았습니다. 이제 호기심에서 벗어난이 시나리오에서 단순히 "SyncLock List1 ... End SyncLock"을 작성하는 대신이 새로운 objStorageLock 객체를 만드는 것이 어떻습니까? –
신경 쓰지 마라. MSDN에서 내 자신의 질문에 대한 대답을 찾았습니다. "SyncLock 블록을 실행하는 동안 lockobject 값을 변경할 수 없습니다. 메커니즘을 사용하면 잠금 개체가 변경되지 않아야합니다." –