VB Parallel.ForEach具有不同的子程序

时间:2017-07-12 15:19:53

标签: vb.net

我目前有测试代码,它由许多不同的子程序组成。我有一个主程序按顺序调用每个...我然后更改代码以支持使用ThreadPool,并将每个测试例程添加到cue。 对我来说下一步是使用Parallel.ForEach,但我找到的每个例子都包含一个被调用的子例程,而不是我的不同例程。

琐碎的例子 - 顺序

Sub Main
    Test1()
    Test2()
    Test3()
End Sub

示例 - ThreadPool

Sub Main
    Dim compportthreads As Int32
    Dim UnusedThreads As Int32
    Dim totalthreads As Int32

    System.Threading.ThreadPool.GetAvailableThreads(totalthreads, compportthreads)
    System.Threading.ThreadPool.QueueUserWorkItem(AddressOf Test1)
    System.Threading.ThreadPool.QueueUserWorkItem(AddressOf Test2)
    System.Threading.ThreadPool.QueueUserWorkItem(AddressOf Test3)

    Do
        System.Threading.ThreadPool.GetAvailableThreads(UnusedThreads, compportthreads)
    Loop Until UnusedThreads = totalthreads
End Sub

示例3 - Parallel.ForEach

???

1 个答案:

答案 0 :(得分:2)

我想你可以这样做:

Dim subs() As Action = {
    AddressOf Test1,
    AddressOf Test2,
    AddressOf Test3
}
Parallel.ForEach(
    subs,
    Sub(item) item()
)

甚至可以使用反射来构建动作列表,而不是对它们进行硬编码,例如

Dim t = Me.GetType()
Dim subs = (
    From m In t.GetMethods()
    Where m.Name.StartsWith("Test")
    Select Sub() m.Invoke(Me, Nothing)
).ToList()
相关问题