这是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)
现在,我需要让task1
和task2
并行运行,但task1
不应该在task2
完成之前结束。整个过程应该等待两个任务完成。
有没有办法使用TPL实现这一目标。或者我是否需要依靠全局变量来阻止task1
完成,直到task2
设置全局变量?
我知道ContinueWith
但是这会破坏与一个接一个地运行的任务的并行性 - 这不是要求。
答案 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
。