Это продолжение предыдущего вопроса относительно блокировки двух объектов List (Of T). Ответ оказался полезным, но оставил мне еще один вопрос.
Предположим, у меня есть такая функция:
Public Function ListWork() As Integer
List1.Clear()
..Some other work which does not modify List1..
List1.AddRange(SomeArray)
..Some more work that does not involve List1..
Return List1.Count
End Function
, которая находится в классе, объявляющем List1. Теперь я понимаю, что в многопоточной среде у меня должен быть частный объект блокировки для List1 и блокировать List1 всякий раз, когда он изменяется или перечисляется. У меня вопрос: что делать:
Private List1Lock As New Object
Public Function ListWork() As Integer
SyncLock List1Lock
List1.Clear()
End SyncLock
..Some other work which does not modify List1..
SyncLock List1Lock
List1.AddRange(SomeArray)
End SyncLock
..Some more work that does not involve List1..
SyncLock List1Lock
Dim list1Count As Integer = List1.Count
End SyncLock
Return list1Count
End Function
или так:
Private List1Lock As New Object
Public Function ListWork() As Integer
SyncLock List1Lock
List1.Clear()
..Some other work which does not modify List1..
List1.AddRange(SomeArray)
..Some more work that does not involve List1..
Dim list1Count As Integer = List1.Count
End SyncLock
Return list1Count
End Function
Я предполагаю, что первый пример оптимален?