Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_Visual Studio - Fatal编程技术网

Vb.net 与parallel.foreach的协作

Vb.net 与parallel.foreach的协作,vb.net,visual-studio,Vb.net,Visual Studio,我有下面一段代码,我正试图将其转换为parallel.foreach,但运气不好。我基本上是想加速我程序的这一部分,并希望并行运行for循环 arrComputers = Split(currentrow(0), vbCrLf) For Each strComputer In arrComputers do stuff do stuff n = DataGridView1.Rows.Add() OtherSub(n, strComputer) Next 我想这就是你要找的例

我有下面一段代码,我正试图将其转换为parallel.foreach,但运气不好。我基本上是想加速我程序的这一部分,并希望并行运行for循环

arrComputers = Split(currentrow(0), vbCrLf)
 For Each strComputer In arrComputers
  do stuff
  do stuff
  n = DataGridView1.Rows.Add()
  OtherSub(n, strComputer)
 Next

我想这就是你要找的例子2:


它可能没有并行运行那么简单,UI元素通常都喜欢在一个线程上工作,所以您可能希望打破这种局面

假设所有东西都并行工作,那么您的循环将如下所示

Parallel.ForEach(arrComputers, Sub(strComputer )
                                 do stuff
                                 do stuff
                                 n = DataGridView1.Rows.Add()
                                 OtherSub(n, strComputer)
                                 end sub())
虽然我习惯了使用

Dim Tasks as list(of task)
For Each strComputer In arrComputers
   tasks.add(task.run(sub() 
       do stuff
       do stuff
       n = DataGridView1.Rows.Add()
       OtherSub(n, strComputer)
   End Sub())
Next
do OtherStuff
do OtherStuff
Task.waitall(tasks.toarray)
我发现它更灵活,我可以将需要同步完成的事情与可以并行完成的事情混合在一起,它还可以更清晰地扩展到Net4.5中的异步模型,其中task.waitall可以更改为task wait task.whalll,如果需要,我可以实现异步和并行。 此外,如果lambda中有大量代码,您可以将其粘贴到sub中以提高可读性。
Tim

我正在运行task.Run不是system.threading.tasks.task和toarrayfor task.toarray的成员。toarray不是tasks的成员。我也尝试了您的第一个方法,但遇到了一个含糊不清的MatchException错误。