提问者:小点点

是否可能/建议使用默认(空白)可等待任务?


我有一些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()”并不产生一个可等待的任务。是否有某种可以作为占位符创建的最小等待任务,以防以后没有创建真正的任务?


共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)