.net 是否可以/建议使用默认(空白)等待任务?
我有一些VB.net代码,如下所示:.net 是否可以/建议使用默认(空白)等待任务?,.net,vb.net,task,async-await,.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)
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()”不会生成等待的任务。
如果以后没有创建真正的任务,我是否可以创建一些最小的等待任务作为占位符?既然你问了,你可以有一个指向虚拟代理的“空白”任务。但是,我认为使用有条件填写的任务列表会更好、更干净:
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)
对于异步世界中的任务,不应使用
任务
构造函数
您可以通过调用
任务来创建一个已完成的任务。FromResult(0)
您可以让一个任务指向一个不执行任何操作的子任务,但您真正应该做的是创建一个要执行的实际任务的列表。我的实际代码更复杂,这使得在结尾有一个等待语句更容易维护。可能的重复这应该是公认的答案,因为它产生的开销最小,而且是Stephen Toub写的。这确实回答了最初的问题,但OP绝对不需要空白任务来完成他试图做的事情。