Что такое Environment.FailFast?
Как это полезно?
Что такое Environment.FailFast?
Как это полезно?
Он используется для уничтожения приложения, это статический метод, который мгновенно убивает приложение, не будучи пойманным никакими исключительными блоками.
Environment.FastFail(String) действительно может быть отличным инструментом отладки. Например, скажем, у вас есть приложение, которое просто откровенно дает вам какой-то странный вывод. Вы понятия не имеете, почему. Вы знаете, что это неправильно, но нет никаких исключений, всплывающих на поверхность, чтобы помочь вам. Что ж, если у вас есть доступ к пункту меню Visual Studio 2005 Debug-> Исключения..., вы фактически можете сказать Visual Studio, чтобы он позволил вам увидеть эти исключения из первого шанса. Однако, если у вас этого нет, вы можете поместить Environment.FastFail(String) в исключение и использовать дедуктивные рассуждения и процесс исключения, чтобы выяснить, в чем ваша проблема.
Он также создает запись дампа и события, которая может быть полезна.
Это способ немедленно выйти из приложения, не вызывая исключения.
Документация здесь.
Может быть полезно в некоторых ситуациях с критикой безопасности или данных.
Failfast может использоваться в ситуациях, когда вы можете подвергать опасности пользовательские данные. Скажем в механизме базы данных, когда вы обнаруживаете повреждение ваших внутренних структур данных, единственным разумным способом действий является как можно быстрее остановить процесс, чтобы избежать записи мусора в базу данных и подвергнуть риску его разложение и потерять пользовательские данные. Это один из возможных сценариев, когда failfast полезен.
Еще одно использование - уловить ошибки программиста. Предположим, вы пишете библиотеку, а какая-то функция принимает указатель, который не может быть ни при каких обстоятельствах, т.е. Если он равен нулю, вы явно обнаруживаете ошибку программиста. Вы можете вернуть ошибку, например E_POINTER, или выбросить какое-то исключение InvalidArgument и надеяться, что кто-то заметит, но вы получите их лучшее, если не быстро: -)
Обратите внимание, что я не ограничиваю пример указателями, вы можете обобщить на любой параметр или условие, которое никогда не должно происходить. Неудача быстро приводит к более качественным приложениям, так как многие ошибки больше не остаются незамеченными.
Наконец, неудача помогает быстро зафиксировать состояние процесса (так как создается дамп памяти), в частности, при быстром сбое сразу после обнаружения неустранимой ошибки или действительно неожиданного условия.
Если процесс был разрешен для продолжения, скажем, будут выполняться предложения "finally" или стек будет размотан, и все будет уничтожено или удалено, до того, как будет сделан дамп памяти, тогда состояние процесса может быть изменен таким образом, что затрудняет диагностику основной причины проблемы.
Он убивает приложение и даже пропускает блоки try/finally.
Цитата отсюда: https://msdn.microsoft.com/en-us/library/ms229030(v=vs.110).aspx
✓ CONSIDER завершает процесс, вызывая System.Environment.FailFast (функция .NET Framework 2.0) вместо того, чтобы бросать исключение, если ваш код встречает ситуацию, когда он небезопасен для дальнейшего выполнения.
Джо Даффи обсуждает провал быстро и дисциплину, чтобы сделать это полезным, здесь.
http://joeduffyblog.com/2014/10/13/if-youre-going-to-fail-do-it-fast/
По сути, он сказал, что для программирования ошибок - то есть непредвиденных ошибок, которые являются ошибкой программиста, а не пользователя программы или других входных данных или ситуаций, которые могут быть разумными, как ожидается, будут плохими, - то было принято решение всегда быстро терпеть неудачу для непредвиденных ошибок. улучшить качество кода.
Я думаю, что поскольку это необязательное командное решение и дисциплина, использование этого API в С# встречается редко, поскольку на самом деле все мы в основном пишем LoB-приложения для 12 человек в HR или, в лучшем случае, в онлайн-магазине.
Так что для нас, мы могли бы использовать это, когда мы хотим лишить пользователя нашего API возможности делать какие-либо дальнейшие шаги.
В документации Microsoft говорится, что если вы решите обработать/перехватить какое-то исключение, вам следует в своем блоке catch вызвать метод Enviroment.FailFast
, чтобы этот метод завершил работу вашего приложения и добавил запись в журнал системных событий.