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

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

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

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

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

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

3 ответа

Решение

Хорошо, я узнал, как это сделать. Ответ прямо здесь, в разделе заметок

Когда включен "Просто мой код", Visual Studio в некоторых случаях будет прерываться на строке, которая выдает исключение, и отображает сообщение об ошибке, которое гласит: "Исключение не обрабатывается кодом пользователя". Эта ошибка доброкачественная. Вы можете нажать F5, чтобы продолжить и увидеть поведение обработки исключений, которое продемонстрировано в этих примерах. Чтобы предотвратить сбои Visual Studio при первой ошибке, просто снимите флажок "Включить только мой код" в меню "Инструменты", "Параметры", "Отладка", "Общие".

С точки зрения VS, на самом деле не существует никаких отличий между исключением, которое выдается из внутри делегата, переданного Задаче, из любого другого исключения.

Нет способа решить это в общем случае.

Тем не менее, единственное, что вы можете сделать, это использовать тот факт, что когда исключение перебрасывается, оно оборачивается в AggregateException, Вы можете сломаться, когда AggregateException брошен но не другие исключения.

Вы можете перейти к "Отладка -> Исключения", отменить выбор всех исключений CLR, но затем повторно включить совокупные исключения:

Теперь он не будет останавливаться в Task тело, но остановит отладчик при вызове Wait,

К сожалению, побочным эффектом является то, что теперь вы больше не будете останавливаться на каких-либо других исключениях в вашей программе, даже если они не входят в делегат, переданный Task,

Чтобы отключить остановку исключений, нажмите " Ctrl + Alt + E ". Откроется окно "Исключения". Снимите флажок "Общепринятое исключение во время выполнения - выброшено".

Другие вопросы по тегам