Visual Studio имеет определенную функцию, облегчающую отладку необработанных исключений: она останавливается на нарушающей строке кода и показывает исключение.Могу ли я, чтобы Visual Studio остановилась на необработанных исключениях внутри кода задачи?
Похоже, что класс Task
сконструирован таким образом, что эта функция всегда подавляется: она улавливает каждое исключение, а затем вызывает другое исключение, когда задание Wait
ed или finalized.
Я знаю, что я могу остановить его на исключениях первого шанса, но это не всегда помогает: представьте, что перед обработанным случаем происходит несколько обработанных исключений одного типа. В этом случае VS будет останавливаться на каждом не проблематичном исключении в дополнение к тому, что действительно вызывает проблему.
Еще одна альтернатива является еще менее приемлемой: просто глядя на трассировку стека InnerException
: это означает, что, хотя я знаю, какая строка вызвала исключение, я не могу получить доступ к каким-либо ее локальным состояниям, как если бы программа была на самом деле остановился.
Могу ли я как-то получить лучшее из обоих миров, используя класс Task
, но не имея необходимости жить с набором функций отладки исключенных исключений?
Бонус вопрос: означает ли это, что пустая ссылка исключение внутри await
блока не вызовет Visual Studio, чтобы остановить прямо там, но вместо того, чтобы остановится где-то совсем другое?
Частный метод Task.Execute() содержит инструкцию catch all. HandleException и AddException после этого. Все частное и не виртуальное. –
@HansPassant, если вы хотите опубликовать это как ответ (подразумевая, что это невозможно, в основном), я в конце концов приму его в отсутствие лучших ответов. –