Надежная регистрация исключений - это единственное, что может сделать глобальный обработчик исключений. После этого всегда следует включать исключение go. Для ведения журнала он должен охватывать широкий диапазон, что означает, что он будет перехватывать фатальные исключения, и они всегда должны иметь значение go. Глобальный обработчик - способ поздно что-либо исправить. Возможно, уже поздно будет что-то регистрировать должным образом, поскольку к тому времени большинство вещей уже выходит из области видимости.
Чтобы знать, как правильно с этим справляться, нам сначала нужно классифицировать это. Я использую эту систему классификации: https://blogs.msdn.microsoft.com/ericlippert/2008/09/10/vexing-exceptions/
BadHttpRequestException
выглядит как исключение с головой. Те, которые вы никогда не должны игнорировать и в идеале никогда не ловить. Те, кого вы должны исправить .
Однако, поскольку мы имеем дело с сетью, есть вероятность, что это может быть Exogenous или Vexing Exception. Если это один из них, вы должны поймать его как можно ближе к тому месту, где он находится, и как можно точнее. Также дайте вызывающему коду подсказку, что что-то пошло не так, поэтому ожидаемого результата нет. Однажды я написал этот пример для реплицированного TryParse:
//Parse throws ArgumentNull, Format and Overflow Exceptions.
//And they only have Exception as base class in common, but identical handling code (output = 0 and return false).
bool TryParse(string input, out int output){
try{
output = int.Parse(input);
}
catch (Exception ex){
if(ex is ArgumentNullException ||
ex is FormatException ||
ex is OverflowException){
//these are the exceptions I am looking for. I will do my thing.
output = 0;
return false;
}
else{
//Not the exceptions I expect. Best to just let them go on their way.
throw;
}
}
//I am pretty sure the Exception replaces the return value in exception case.
//So this one will only be returned without any Exceptions, expected or unexpected
return true;
}
Vexing части Parse? Те попадают прямо туда и общаются через возвращение bool. Мне пришлось перехватывать или обрабатывать трижды код обработки, поэтому я приложил все усилия с is
проверками для фильтрации позже.
Для общих приличных практик у меня есть одна статья . Вместе с приведенной выше классификацией это является основой всех моих решений по обработке исключений.