2 个任务 运行 并行,但一个完成工作并等待另一个完成

2 tasks running in parallel, but one finishes work and waits for the other to complete

这是对

中解决方案的扩展

两个任务的方法是:

Private Sub tempWorker1()
  For i = 1 To 50000
     If i Mod 100 = 0 Then
        Console.WriteLine("From 1:{0}", i)
     End If
  Next
End Sub

Private Sub tempWorker2()
  For i = 1 To 1000
     If i Mod 100 = 0 Then
        Console.WriteLine("From 2:{0}", i)
     End If
  Next
End Sub

调用方式有:

Dim task1 As Task = Task.Run(AddressOf tempWorker1)
Dim task2 As Task = Task.Run(AddressOf tempWorker2)
Await Task.WhenAll(task1, task2).ConfigureAwait(False)

现在,我需要同时进行 task1task2 运行,但是 task1 应该在 task2 完成之前结束。并且整个过程应该等待两个任务完成。

有没有办法使用 TPL 实现此目的。或者我是否需要依靠全局变量来阻止 task1 完成直到 task2 设置全局变量?

我知道 ContinueWith 但那会破坏任务的并行性 运行 一个接一个地进行 - 这不是要求。

I'd need to have task1 and task2 run in parallel but task1 should not be over until task2 is complete.

所以,首先开始 task2,然后将 task2 传递给 tempWorker1:

Dim task2 As Task = Task.Run(AddressOf tempWorker2)
Dim task1 As Task = Task.Run(Function() tempWorker1(task2))

并在需要值时让 tempWorker1 调用 Await task2