Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 是否可以/建议使用默认(空白)等待任务?_.net_Vb.net_Task_Async Await - Fatal编程技术网

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

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

既然你问了,你可以有一个指向虚拟代理的“空白”任务。但是,我认为使用有条件填写的任务列表会更好、更干净:

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绝对不需要空白任务来完成他试图做的事情。