在尝试捕获中不处理在Async子项中引发自定义异常

时间:2019-06-06 09:58:19

标签: vb.net asynchronous exception task

我注意到一些奇怪的事情,无法找到为什么这不能正常工作。

我遇到的错误是在Async子程序中引发异常的一个

Private Async Sub Test1
    If Await SomeAsyncReadProcess <> "My Result" then
        Throw New Exception("Onoo invalid result!")
    End if
End sub

然后,如果在尝试捕获中包含此Sub,则使代码更高。现在奇怪的是,当我引发新异常时,调试器停止运行并说System.Reflection.TargetInvocationException。当我在不使用Aynsc / Await的情况下将子菜单还原回SYNC子菜单时,一切都会按预期进行。

1 个答案:

答案 0 :(得分:1)

您无法轻易地从Async Sub捕获异常。这是设计使然,因为Async Sub方法是非常不寻常的Async方法,其作用类似于顶级事件处理程序。一般规则是"avoid async void" (or in this case, Async Sub)

适当的解决方法是将Async Sub更改为Async Function ... As Task