使用并行扩展和VB.net传递值

使用并行扩展和VB.net传递值,vb.net,parallel-processing,parallel-extensions,Vb.net,Parallel Processing,Parallel Extensions,我正在寻找一个如何在VB.net中使用并行扩展执行以下操作的示例 Dim T As Thread = New Thread(AddressOf functiontodowork) T1.Start(InputValueforWork) 我遇到的难题是如何将我的参数InputValueforWork传递到任务中 Dim T As Tasks.Task = Tasks.Task.Create(AddressOf functiontodowork) 任何建议和可能的编码示例都将受到欢迎 Andre

我正在寻找一个如何在VB.net中使用并行扩展执行以下操作的示例

Dim T As Thread = New Thread(AddressOf functiontodowork)
T1.Start(InputValueforWork)
我遇到的难题是如何将我的参数InputValueforWork传递到任务中

Dim T As Tasks.Task = Tasks.Task.Create(AddressOf functiontodowork)
任何建议和可能的编码示例都将受到欢迎


Andrew不一定是我所知道的最有用的答案,但在C#中,你可以通过闭包来实现这一点:

var T = Tasks.Task.Create( () => functionToDoWork(SomeParameter) )

这不一定是我所知道的最有用的答案,但在C#中,你可以通过闭包来实现这一点:

var T = Tasks.Task.Create( () => functionToDoWork(SomeParameter) )

这里真正的问题是,只有Funcs

您可以通过在C#中使用助手来解决此限制,如下所示:

public class VBHelpers {
    public static Action<T> FuncToAction<T>(Func<T, object> f) {
        return p => f(p);
    }
}
Public Sub DoSomething()
    Dim T As Task = Task.Create(VBHelpers.FuncToAction(Function(p) FunctionToDoWork(p)))
End Sub

Public Function FunctionToDoWork(ByVal e As Object) As Integer
    ' this does the real work
End Function

这里真正的问题是,只有Funcs

您可以通过在C#中使用助手来解决此限制,如下所示:

public class VBHelpers {
    public static Action<T> FuncToAction<T>(Func<T, object> f) {
        return p => f(p);
    }
}
Public Sub DoSomething()
    Dim T As Task = Task.Create(VBHelpers.FuncToAction(Function(p) FunctionToDoWork(p)))
End Sub

Public Function FunctionToDoWork(ByVal e As Object) As Integer
    ' this does the real work
End Function

我解决了自己的问题。您必须传入一个包含值的数组

Dim A(0) as Int32
A(0) = 1
Tasks.Task.Create(AddressOf TransferData, A)

我解决了自己的问题。您必须传入一个包含值的数组

Dim A(0) as Int32
A(0) = 1
Tasks.Task.Create(AddressOf TransferData, A)