【发布时间】:2019-07-09 16:23:43
【问题描述】:
Task.WhenAll 在第一个任务完成后返回。我只是循环记录并将其添加到taskList 然后等待Task.WhenAll 但是在调试时我发现它在完成第一个任务后返回到主函数。请检查我的TrackPackages 功能:
Public Async Function TrackPackages(ByVal trackingNos As String) As Task(Of String)
Dim trackResponseXml As String = String.Empty
Dim skipNos As Integer = 0
Dim takeNos As Integer = 10
Dim strResponses As String = String.Empty
Dim taskList As List(Of Task(Of String)) = New List(Of Task(Of String))()
If Not String.IsNullOrEmpty(trackingNos) Then
Dim totalTrackingNos As List(Of String) = trackingNos.Split(","c).ToList()
skipNos = 0
'Dim totallparalleltask = (totalTrackingNos.Count / 35)
'For var = 0 To totallparalleltask
While skipNos < totalTrackingNos.Count
Dim trackingNoArray = totalTrackingNos.Skip(skipNos).Take(takeNos).ToList()
taskList.Add(Task.Run(Function() GetTrackResponseXML(trackingNoArray)))
skipNos = skipNos + 10
End While
'Next var
Dim lastindex As Integer = 0
'Here is issue with task.whenall it returns on completion of first task
Dim alltaskstring = Await Task.WhenAll(taskList.ToArray)
If (Task.WhenAll(taskList).IsCompleted) Then
'Dim abcsdsd As String = Await GetTrackResponseString(item, trackResponseXml)
Return trackResponseXml
End If
End If
End Function
它应该完成来自Task.WhenAll(taskList)的所有任务。
【问题讨论】:
标签: vb.net async-await task-parallel-library