Остановить визуальную студию от взлома исключения в задачах
У меня есть следующий код:
Task load = Task.Factory.StartNew(() => {//Some Stuff Which Throws an Exception});
try
{
load.Wait();
}
catch (AggregateException ex)
{
MessageBox.Show("Error!");
}
Когда когда-либо в Задаче бросается исключение, я хочу, чтобы он пузырился, попал в try catch вместо визуального взлома студии в точке, вызвавшей исключение.
Я пробовал Google, а некоторые предложили добавить этот [DebuggerHidden]
поверх моего метода, но он не работает
Ответы
Ответ 1
Хорошо, я узнал, как это сделать. Ответ правильный здесь в разделе примечаний
Когда включен "Только мой код", Visual Studio в некоторых случаях будет разбиваться на строку, которая генерирует исключение, и выводит сообщение об ошибке "Исключение не обрабатывается кодом пользователя". Эта ошибка является доброкачественной. Вы можете нажать F5 для продолжения и увидеть поведение обработки исключений, которое демонстрируется в этих примерах. Чтобы предотвратить появление первой ошибки Visual Studio, снимите флажок "Включить только мой код" в разделе "Инструменты", "Параметры", "Отладка", "Общие".
Ответ 2
С точки зрения VS действительно нет никакого различия между тем исключением, которое исключается из пропуска делегата в Задачу из любого другого исключения.
В общем случае нет способа решить это.
Тем не менее, одна вещь, которую вы могли бы сделать, - это использовать тот факт, что когда исключение повторно выбрано, оно завершается в AggregateException
. Вы можете сломать, когда выбрано AggregateException
, но не другие исключения.
Вы можете перейти в "Отладка" → "Исключения", отменить все исключения CLR, но затем снова включить исключения агрегатов:
![enter image description here]()
Теперь он не будет останавливаться в теле Task
, но приостанавливает отладчик при вызове Wait
.
Несчастливый побочный эффект заключается в том, что теперь вы больше не будете останавливаться на каких-либо других исключениях где-либо еще в своей программе, даже если они не входят в делегат, переданный в Task
.
Ответ 3
Чтобы отключить остановку на исключениях, нажмите "Ctrl + Alt + E". Откроется окно "Исключения". Отключить "Исключения для обычного языка Runtime Exhaustions - Thrown".