我正在尝试从Delegates更改为Parallel.ForEach
我看到下面的工作正常。
Imports System.Threading.Tasks
Sub Main()
Dim secs() As Integer = {2, 3, 1}
Parallel.ForEach(secs, AddressOf Method2)
End Sub
Sub Method2(ByVal i As Integer)
Console.WriteLine(i.ToString)
End Sub
但是如果我的Sub需要多个变量呢?你能告诉我我应该怎么做吗?
Imports System.Threading.Tasks
Sub Main()
Dim secs() As Integer = {2, 3, 1}
Dim Path as String = "Constant"
Parallel.ForEach(secs, Path, AddressOf Method2)
End Sub
Sub Method2(ByVal i As Integer, path as string )
Console.WriteLine(i.ToString, path)
End Sub
谢谢
答案 0 :(得分:4)
您可以通过Lambda Expression:
执行此操作Imports System.Threading.Tasks
Sub Main()
Dim secs() As Integer = {2, 3, 1}
Dim Path as String = "Constant"
Parallel.ForEach(secs, Sub(sec) Method2(sec, Path))
End Sub
Sub Method2(ByVal i As Integer, path as string)
Console.WriteLine(i.ToString(), path)
End Sub
这将允许编译器创建一个获取Path值的闭包,并将其直接传递给您的方法。
答案 1 :(得分:1)
当然在C#中,我会使用lambda表达式来调用Method2
:
Parallel.ForEach(secs, i => Method2(i, path));
VB中的等效内容是否优雅,超出了我对上午12点50分没有使用的语言的良好判断力,但你没有其他很多选择 - 假设你没有想要创建另一个类的实例,将path
传递给构造函数,然后在该类中使用单参数方法......
(哦,另一种选择是将Method2
更改为单个参数方法,其中参数封装了两个值。所以我猜你做有几个选项 - 但在C#中至少,lambda表达式将成为可行的方法。)