Создание пользовательского исключения в подпрограмме Async не обрабатывается в Try Catch - PullRequest
0 голосов
/ 06 июня 2019

Я заметил что-то странное и не могу найти, почему это не будет работать правильно.

Ошибка, с которой я сталкиваюсь, связана с асинхронной подпрограммой, в которой выдается исключение:

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

Затем увеличьте код, если эта подпрограмма имеется в пробном вылове.Теперь странно то, что когда я выбрасываю новое исключение, мой отладчик останавливается и говорит System.Reflection.TargetInvocationException.Когда я возвращаю сабвуфер обратно на сабвуфер SYNC без Aynsc / Await, тогда все работает как надо.

1 Ответ

1 голос
/ 06 июня 2019

Вы не можете легко поймать исключения из Async Sub. Это сделано специально, так как Async Sub методы очень необычные Async методы, которые действуют как обработчики событий верхнего уровня. Общее правило: "избегать async void" (или в данном случае Async Sub) .

Соответствующее исправление - изменить Async Sub на Async Function ... As Task.

...