Visual Studio имеет определенную функцию, которая значительно упрощает отладку необработанных исключений: он останавливается на ошибочной строке кода и показывает исключение.
Похоже, что класс Task
спроектирован таким образом, что эта функция всегда подавляется: он перехватывает каждое исключение, а затем повторно генерирует другое исключение, когда задача Wait
ред или доработан.
Я знаю, что могу остановить это на случайных исключениях, но это не всегда помогает: представьте, что несколько обработанных исключений одного и того же типа возникают раньше необработанного. В этом случае VS будет останавливаться на каждом непроблемном исключении в дополнение к тому, которое действительно вызывает проблему.
Другая альтернатива еще менее приемлема: просто взгляните на трассировку стека InnerException
: это означает, что, хотя я знаю, какая строка вызвала исключение, я не могу получить доступ ни к одному из ее локальных состояний, как я мог бы если программа действительно была остановлена на этом.
Могу ли я каким-то образом получить лучшее из обоих миров, используя класс Task
, но не имея необходимости жить с ухудшенным набором функций отладки исключений?
Дополнительный вопрос: означает ли это, что исключение нулевой ссылки внутри блока await
не приведет к остановке Visual Studio прямо здесь, а вместо этого остановится в другом месте?