异步任务消失了

时间:2016-03-13 05:08:28

标签: vb.net task

我正在创建很多这样的任务:

Public Sub RequestAsync()
    Dim wc As New Net.WebClient
    CompleteTask = wc.DownloadStringTaskAsync(GetUrl())
    Dim CompleteAction As Action(Of Tasks.Task(Of String)) = AddressOf CompleteAsync
    CompleteTask.ContinueWith(CompleteAction)
End Sub

我正在跟踪有多少并发任务(在这个子项之外),将它们限制为10.当我调用RequestAsync()时,我递增计数器,当调用CompleteAction时,它会递减计数器。

99.98%的人正确完成,有些预计会因网络故障而失败,在这种情况下他们会被重新安排。然而,剩下的0.02%消失了,再也没有听到过。据我所知,他们的线程已经完成,但他们从未调用过CompleteAction。

这是正常行为吗?有什么方法可以保证我在任务失败时收到通知吗?

1 个答案:

答案 0 :(得分:0)

您可能需要始终观察Task可能的例外情况 使用Await关键字将任务解包为基础结果 当您使用Await代码时,代码将被移至RequestAsync方法的调用者,并在DownloadStringTaskAsync完成后返回此处。
将您的方法更改为Async

Public Async Function RequestAsync() As Task
    Dim wc As New Net.WebClient
    Dim result As String = Await wc.DownloadStringTaskAsync(GetUrl())
    'Check for result here
End Function

Task包含处理期间和AggregateException实例中发生的所有异常 仅在观察到Task时才会抛出异常