如何并行运行3个子并等待它们全部完成以在VB中继续

时间:2019-02-01 16:31:13

标签: vb.net multithreading asynchronous

我基本上有3个Sub,我希望它们一起运行并收敛,直到它们完成并继续主sub。我可以用C#做​​到这一点,我很难在VB.Net中做到这一点

基本上,我正在尝试完成下图所示的事情。

                   |---sub1()---|
Start sub()--------|---sub2()---|---main()----> end sub()
                   |---sub3()---|

Private Sub Manual_Trades_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim T1 As New Task(AddressOf sub1)
    Dim T2 As New Task(AddressOf sub2)
    Dim T3 As New Task(AddressOf sub3)
    T1.Start()
    T2.Start()
    T3.Start()
    Task.WaitAll(T1, T2, T3)
End Sub 

Sub sub1()
    'Do something that takes time
End Sub

Sub sub2()
    'Do something that takes time
End Sub

Sub sub3()
    'Do something that takes time
End Sub

1 个答案:

答案 0 :(得分:0)

基于您的第一个样本。您可以尝试使用Task.Run代替。 Seems like it's the suggested method of doing it

Sub sub1()
    Threading.Thread.Sleep(1000)
    Console.WriteLine("1")
End Sub

Sub sub2()
    Threading.Thread.Sleep(2000)
    Console.WriteLine("2")
End Sub

Sub sub3()
    Threading.Thread.Sleep(3000)
    Console.WriteLine("3")
End Sub

Sub RunAllAndWait()

    Dim T1 As Task = Task.Run(AddressOf sub1)
    Dim T2 As Task = Task.Run(AddressOf sub2)
    Dim T3 As Task = Task.Run(AddressOf sub3)

    Task.WaitAll({T1, T2, T3})

End Sub