Подтвердить что ты не робот

Остановить визуальную студию от взлома исключения в задачах

У меня есть следующий код:

Task load = Task.Factory.StartNew(() => {//Some Stuff Which Throws an Exception});

try
{
    load.Wait();
}
catch (AggregateException ex)
{
    MessageBox.Show("Error!");
}

Когда когда-либо в Задаче бросается исключение, я хочу, чтобы он пузырился, попал в try catch вместо визуального взлома студии в точке, вызвавшей исключение.

Я пробовал Google, а некоторые предложили добавить этот [DebuggerHidden] поверх моего метода, но он не работает

4b9b3361

Ответ 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".