C# - попытаться использовать операторы catch
Это хорошая практика, чтобы обернуть каждую функцию с помощью try and catch?
Я собираю сервер на C# и пытаюсь понять, можно ли одним из способов сделать его более надежным и защищенным от сбоев, обернуть каждую функцию в нем оператором try&catch.
Это что-то разумное сделать??
3 ответа
Это хорошая практика, чтобы обернуть каждую функцию с помощью try and catch?
Точно нет. Это рецепт для катастрофы - это означает, что вы, вероятно, попытаетесь продолжить работу с запросом, даже если что-то пошло не так и состояние повреждено.
Обычно у вас должны быть только блоки catch, где вы можете обработать исключение и продолжить успешно; в противном случае вы должны позволить появлению исключения. Таким образом, вы можете иметь catch
заблокировать, чтобы повторить определенные операции, но только определенные.
Вы можете иметь catch
заблокировать прямо на верхнем уровне, чтобы остановить сбой самого сервера. Вы не сказали нам, какой тип сервера вы создаете - сама структура может обеспечить соответствующий catch
блокировать, как это.
Другая причина поймать исключение состоит в том, чтобы обернуть его и отбросить как более подходящее, чтобы скрыть детали реализации и, возможно, добавить больше контекста. Это, честно говоря, может быть немного болезненным, и полезно только в определенных ситуациях. Это действительно зависит от того, какой код вызывает исключение, и как вы ожидаете с ним справиться.
Два конкретных и важных замечания:
Олицетворение - всегда используйте блоки try/catch/finally: Если вы когда-либо использовали олицетворение, вы должны всегда заключать код в блок try/catch/finally и помещать код выхода из системы в блок finally. Причина в том, что если во время олицетворения возникает исключение, и оно "всплывает", вы все равно будете зарегистрированы как олицетворяющая личность, что представляет угрозу безопасности.
Циклы - никогда не используйте блоки try / catch: блоки try / catch стоят дорого. Если ваше приложение сталкивается с препятствиями, для которых исключение должно доходить до вершины, это нормально, но никогда не используйте try / catch внутри цикла для перехода к следующему элементу. Примером может служить цикл, который выполняет некоторые вычисления, и вы получаете ошибку деления на 0, если данные неверны. Вместо того, чтобы выполнять вычисление, затем перехватить исключение и продолжить цикл, просто проверьте 0 и продолжайте цикл, чтобы исключение никогда не создавалось.
Я думаю, что лучше обернуть группу функций, пытаясь поймать различные исключения и обработать их. Это обеспечивает более читаемый и меньший код с той же функциональностью