TL; DR - Нет , вы не должны просто тихо игнорировать исключения.
Давайте посмотрим на предположения.
Я научился верить, что многие решения в .NET были приняты людьми, которые действительно знают, что они делают, и, как правило, есть веская причина, по которой они решают. Но этот ускользает от меня.
Без сомнения, у MS есть действительно блестящие люди. У них также есть ряд менеджеров и руководителей, которые ... невежественны и постоянно принимают плохие решения. Как бы нам ни хотелось верить сказке о технически подкованном ученом, ведущем разработку продукта, реальность гораздо мрачнее.
Суть в том, что если ваш инстинкт говорит вам, что что-то может быть не так, то есть хороший шанс (и прошлый прецедент), что это неправильно.
- Что это техническая проблема
Как обрабатывать исключения в этом случае является решением человеческого фактора, а не техническим решением. Проще говоря, исключением является ошибка. Сообщение об ошибке, даже если она плохо отформатирована, предоставляет важную информацию конечному пользователю. А именно, что-то пошло не так.
Рассмотрим этот гипотетический разговор между конечным пользователем и разработчиком.
Пользователь: приложение не работает.
Dev: Что сломано?
Пользователь: Я не знаю, я нажимаю на кнопку, и ничего не происходит.
Dev: Что вы подразумеваете под ничего не происходит?
Пользователь: Смотри, я нажимаю, я жду, и я жду, и я жду, и ничего ... это явно сломано.
Наш бедный, к счастью, гипотетический разработчик теперь должен выяснить, что пошло не так в цепочке событий. Где оно было?
Уведомление обработчика события -> Процедура обработки события -> Метод, инициируемый обработчиком -> Начало асинхронного вызова -> 7 уровней сети OSI -> Физическая передача -> Резервное копирование 7 уровней сети OSI -> Служба получения -> метод, вызываемый службой -> ... -> возвращаемый ответ, отправленный службой -> .... -> асинхронная квитанция -> обработка асинхронного ответа -> ...
И, пожалуйста, обратите внимание, что я замял несколько возможных путей ошибок там.
После рассмотрения некоторых базовых предположений, я думаю, становится более понятным, почему тихое подавление исключений - плохая идея. Исключение и связанное с ним сообщение об ошибке являются ключевым показателем для пользователей, что что-то пошло не так. Даже если сообщение не имеет смысла для конечного пользователя, встроенная информация может быть полезна для разработчика, чтобы понять, что пошло не так. Если им повезет, сообщение даже приведет к решению.
Я думаю, что отчасти проблема заключается в том, что неправильно обработанное исключение приведет к сбою вашего приложения. Подавляя исключения, приложение не будет аварийно завершать работу. В этом есть некоторая обоснованность, поскольку суть асинхронности заключается в том, чтобы позволить приложению продолжать работать во время извлечения данных. Не слишком логично говорить, что если вы могли бы продолжать работать, ожидая результатов, то сбой при извлечении также не должен приводить к сбою приложения - асинхронный вызов неявно объявляется как недостаточно важный для завершения приложения.
Так что это решение, но оно решает не ту проблему. Не требуется много усилий, чтобы предоставить оболочку для обработки исключений, чтобы приложение могло оставаться запущенным. Обнаружено исключение, сообщение об ошибке выдается на экран или регистрируется, и приложение может продолжать работать. Подавление исключения подразумевает, что игнорирование ошибок будет в порядке, и что ваше тестирование гарантирует, что исключения все равно никогда не попадут в поле.
Таким образом, моя окончательная оценка заключается в том, что это несостоятельная попытка решить проблему, созданную путем подталкивания людей к асинхронной модели, когда они не были готовы переключить свое мышление на такой подход.