我有一些类似的VB.net代码:
If (condition1) Then
Dim Task1 = function1Async()
Dim Task2 = function2Async()
Await Task.WhenAll(Task1, Task2)
Else
Dim Task1 = function1Async()
Dim Task3 = function3Async()
Await Task.WhenAll(Task1, Task3)
End If
但我更喜欢做类似的事情:
Dim Task1 = function1Async()
Dim Task2 = New Task()
Dim Task3 = New Task()
If (condition1) Then
Task2 = function2Async()
Else
Task3 = function3Async()
End If
Await Task.WhenAll(Task1, Task2, Task3)
但是,“New Task()”不会产生等待的任务。 是否存在某种最小等待任务,我可以将其创建为占位符,以防以后不创建真正的任务?
答案 0 :(得分:5)
您不应该将Task
构造函数用于异步世界中的任务。
您可以致电Task.FromResult(0)
来创建已完成的任务。
答案 1 :(得分:2)
因为你问,你可以有一个指向虚拟代表的“空白”任务。但是,我认为使用有条件填充的任务列表会更好更清洁:
Dim TaskList As New List(Of Task)
TaskList.Add(function1Async())
If (condition1) Then
TaskList.Add(function2Async())
Else
TaskList.Add(function3Async())
End If
Await Task.WhenAll(TaskList)