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)
现在,我需要同时进行 task1
和 task2
运行,但是 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
。
这是对
两个任务的方法是:
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
但那会破坏任务的并行性 运行 一个接一个地进行 - 这不是要求。
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
。