我目前有测试代码,它由许多不同的子程序组成。我有一个主程序按顺序调用每个...我然后更改代码以支持使用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
???
答案 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()