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

时间:2014-04-30 14:36:18

标签: .net vb.net task async-await

我有一些类似的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 个答案:

答案 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)