Я добавил следующие Расширения в свой Проект, чтобы создать список безопасных потоков:
Расширения Если я хочу выполнить простую операцию в моем списке
<Extension()> _
Public Sub Action(Of T)(ByVal list As List(Of T), ByVal action As Action(Of List(Of T)))
SyncLock (list)
action(list)
End SyncLock
End Sub
Если я хочу передать его более чем одному параметру, я мог бы просто расширить его с помощью большего количества элементов ...
<Extension()> _
Public Sub Action(Of T)(ByVal list As List(Of T), ByVal action As Action(Of List(Of T), T), ByVal item As T)
SyncLock (list)
Action(list, item)
End SyncLock
End Sub
Действия Я создал следующие Примеры действий:
Private Sub Read(Of T)(ByVal list As List(Of T))
Console.WriteLine("Read")
For Each item As T In list
Console.WriteLine(item.ToString)
Thread.Sleep(10)
Next
End Sub
, а также тот, который принимает параметр:
Private Sub Write(Of T)(ByVal list As List(Of T), ByVal item As T)
Thread.Sleep(100)
list.Add(item)
Console.WriteLine("Write")
End Sub
Инициирование Затем в моих различных потоках я буду называть свои Действия с:
list.Action(AddressOf Read)
или
list.Action(AddressOf Write2, 10)
Эти методы Extenxion безопасны для потоков или у вас есть другие рекомендации?Он похож на метод List.Foreach, который выполняет действие.