Vb.net 与parallel.foreach的协作
我有下面一段代码,我正试图将其转换为parallel.foreach,但运气不好。我基本上是想加速我程序的这一部分,并希望并行运行for循环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 我想这就是你要找的例
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错误。