Остановите визуальную студию от взлома исключения в Задач
У меня есть следующий код:
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 ". Откроется окно "Исключения". Снимите флажок "Общепринятое исключение во время выполнения - выброшено".