在Parallel.Foreach里面循环列表

时间:2014-06-29 23:47:18

标签: vb.net parallel.foreach

我想遍历Parallel.ForEach循环中的列表,但列表将是我必须轮流访问的共享资源,我认为这会破坏并行性的目的。对列表的访问是只读的,所以我想知道是否有办法复制列表,并允许每个线程选择一个如果其他线程没有使用它。

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)

0 个答案:

没有答案