我有以下代码,我试图转换为 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
答案 0 :(得分:0)
我认为Exaple2就是你要找的东西:
http://www.codeproject.com/Articles/71285/Introducing-NET-Parallel-Programming
答案 1 :(得分:0)
它可能不像并行运行那么简单,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)
我发现它更灵活我可以将需要同步完成的事情与可以并行完成的事情混合在一起它也更加干净地扩展到Net 4.5中的异步模型,其中task.waitall可以更改为任务等待任务.whenall,如果需要,我可以实现异步和并行。 另外,如果你的lambda中有很多代码,你可以把它粘在一个sub中以便于阅读。 蒂姆