为什么C#不会抛出在异步函数的本地函数内发生的异常?

时间:2018-05-21 07:05:17

标签: c# uwp

我有这个功能:

G

当我调用TryPlayElseStop方法时,应该引发一个NullReferenceException。但是,该应用程序不会引发一个,但只是继续运行,好像没有任何反应。

我试过调试它,但是当我跨过应该抛出异常的行时,调试就会停止,这正是我所期待的。但是,应用程序不会停止。只有调试器。

1 个答案:

答案 0 :(得分:2)

  

当我调用TryPlayElseStop方法时,应该引发一个NullReferenceException。

不,当你调用TryPlayElseStop方法时,它应该返回一个错误的任务。使用async修饰符永远声明的方法会同步抛出异常,即使它在同步执行时(在第一次等待必须“暂停”之前)到达异常时。

您尚未显示如何调用TryPlayElseStop,但是等待返回的任务或在其上调用Wait()Result 抛出异常(假设Play本身会抛出异常,因为您已经评论过)。也许你不是在等待TryPlayElseStop任何地方的结果?