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

时间:2015-07-17 11:23:26

标签: parallel-processing task-parallel-library task

这是2 Async tasks in parallel and waiting for results - .Net

中解决方案的扩展

这两项任务的方法是:

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但是这会破坏与一个接一个地运行的任务的并行性 - 这不是要求。

1 个答案:

答案 0 :(得分:1)

  

我需要让task1和task2并行运行,但在task2完成之前,task1不应该结束。

所以,首先启动task2,然后将task2传递到tempWorker1

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

在需要值时tempWorker1调用Await task2