Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在Parallel.Foreach内循环遍历列表_Vb.net_Parallel.foreach - Fatal编程技术网

Vb.net 在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

我希望遍历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)

如果列表是只读的,那么就不会有问题。如果一个线程正在修改列表中的数据,而另一个线程正在尝试读取数据,则会出现问题。若并没有修改,那个么阅读就不会受到干扰。这有帮助吗?