【发布时间】:2015-07-17 11:23:26
【问题描述】:
这是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 但这会破坏并行性,因为任务一个接一个地运行 - 这不是要求。
【问题讨论】:
-
如果我理解正确,您的
tempWorker1()和tempWorker2()中的代码是虚拟代码;在您的实际代码中,tempWorker1()需要在其执行过程中使用由tempWorker2()计算的结果,但在达到该点之前应该允许这两个函数并行执行。我对吗?如果没有,请修改您的描述和代码示例,以更好地说明为什么您需要task1来“直到task2完成”。 -
是的,你是对的。它们是虚拟代码,
tempWorker1()需要使用来自tempWorker2()的结果。是的,应该允许这两个函数在达到该点之前并行执行。
标签: parallel-processing task-parallel-library task