【发布时间】:2010-06-17 18:09:09
【问题描述】:
我已将以下扩展添加到我的项目中以创建线程安全列表:
扩展 如果我想对我的列表进行简单的操作
<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)
这些扩展方法是线程安全的还是您有其他建议?它类似于 List.Foreach 采取行动的方法。
【问题讨论】:
标签: vb.net multithreading collections thread-safety