Vb.net 在Parallel.Foreach内循环遍历列表
我希望遍历Parallel.ForEach循环中的列表,但该列表将是一个共享资源,我必须轮流访问,我认为这会破坏并行性的目的。对列表的访问是只读的,所以我想知道是否有办法复制列表,并允许每个线程在其他线程未使用列表时选择一个Vb.net 在Parallel.Foreach内循环遍历列表,vb.net,parallel.foreach,Vb.net,Parallel.foreach,我希望遍历Parallel.ForEach循环中的列表,但该列表将是一个共享资源,我必须轮流访问,我认为这会破坏并行性的目的。对列表的访问是只读的,所以我想知道是否有办法复制列表,并允许每个线程在其他线程未使用列表时选择一个 Dim collCopy1 As List(Of InnerType) = innerCollection.ToList() Dim collCopy2 As List(Of InnerType) = innerCollection.ToList() Dim collCop
Dim collCopy1 As List(Of InnerType) = innerCollection.ToList()
Dim collCopy2 As List(Of InnerType) = innerCollection.ToList()
Dim collCopy3 As List(Of InnerType) = innerCollection.ToList()
Dim collCopy4 As List(Of InnerType) = innerCollection.ToList()
Dim Lock As New Object
Dim ParallelOpts As New ParallelOptions()
ParallelOpts.MaxDegreeOfParallelism = 4
Task.Factory.StartNew(Sub()
Parallel.ForEach(outerCollection,
ParallelOpts,
Sub(outerItem As OuterType)
'Pick from collCopy1, collCopy2, collCopy3, collCopy4 here, assign to innerList, and SyncLock it
For Each innerItem As InnerType In innerList
'Do some stuff
Next
End Sub)
End Sub)
如果列表是只读的,那么就不会有问题。如果一个线程正在修改列表中的数据,而另一个线程正在尝试读取数据,则会出现问题。若并没有修改,那个么阅读就不会受到干扰。这有帮助吗?