假設我有一個IEnumerable,比如一個List(TValue),並且我想跟蹤這個列表是否被訪問(爲了防止問題發生,例如,當它在另一個線程上迭代時添加到列表中) ;我總是可以寫代碼如下所示:有沒有辦法檢查IEnumerable是否使用For Each循環訪問?
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。現在出於好奇,在這種情況下,爲什麼我會創建這個新的objStorageLock對象,而不是簡單地編寫「SyncLock List1 ... End SyncLock」? – 2009-05-19 14:01:41