Подтвердить что ты не робот

Что такое Environment.FailFast?

Что такое Environment.FailFast?

Как это полезно?

4b9b3361

Ответ 1

Он используется для уничтожения приложения, это статический метод, который мгновенно убивает приложение, не будучи пойманным никакими исключительными блоками.

Environment.FastFail(String) действительно может быть отличным инструментом отладки. Например, скажем, у вас есть приложение, которое просто откровенно дает вам какой-то странный вывод. Вы понятия не имеете, почему. Вы знаете, что это неправильно, но нет никаких исключений, всплывающих на поверхность, чтобы помочь вам. Что ж, если у вас есть доступ к пункту меню Visual Studio 2005 Debug-> Исключения..., вы фактически можете сказать Visual Studio, чтобы он позволил вам увидеть эти исключения из первого шанса. Однако, если у вас этого нет, вы можете поместить Environment.FastFail(String) в исключение и использовать дедуктивные рассуждения и процесс исключения, чтобы выяснить, в чем ваша проблема.

Ссылка

Ответ 2

Он также создает запись дампа и события, которая может быть полезна.

Ответ 3

Это способ немедленно выйти из приложения, не вызывая исключения.

Документация здесь.

Может быть полезно в некоторых ситуациях с критикой безопасности или данных.

Ответ 4

Failfast может использоваться в ситуациях, когда вы можете подвергать опасности пользовательские данные. Скажем в механизме базы данных, когда вы обнаруживаете повреждение ваших внутренних структур данных, единственным разумным способом действий является как можно быстрее остановить процесс, чтобы избежать записи мусора в базу данных и подвергнуть риску его разложение и потерять пользовательские данные. Это один из возможных сценариев, когда failfast полезен.

Еще одно использование - уловить ошибки программиста. Предположим, вы пишете библиотеку, а какая-то функция принимает указатель, который не может быть ни при каких обстоятельствах, т.е. Если он равен нулю, вы явно обнаруживаете ошибку программиста. Вы можете вернуть ошибку, например E_POINTER, или выбросить какое-то исключение InvalidArgument и надеяться, что кто-то заметит, но вы получите их лучшее, если не быстро: -)

Обратите внимание, что я не ограничиваю пример указателями, вы можете обобщить на любой параметр или условие, которое никогда не должно происходить. Неудача быстро приводит к более качественным приложениям, так как многие ошибки больше не остаются незамеченными.

Наконец, неудача помогает быстро зафиксировать состояние процесса (так как создается дамп памяти), в частности, при быстром сбое сразу после обнаружения неустранимой ошибки или действительно неожиданного условия.

Если процесс был разрешен для продолжения, скажем, будут выполняться предложения "finally" или стек будет размотан, и все будет уничтожено или удалено, до того, как будет сделан дамп памяти, тогда состояние процесса может быть изменен таким образом, что затрудняет диагностику основной причины проблемы.

Ответ 5

Он убивает приложение и даже пропускает блоки try/finally.

Ответ 6

Цитата отсюда: https://msdn.microsoft.com/en-us/library/ms229030(v=vs.110).aspx

✓ CONSIDER завершает процесс, вызывая System.Environment.FailFast (функция .NET Framework 2.0) вместо того, чтобы бросать исключение, если ваш код встречает ситуацию, когда он небезопасен для дальнейшего выполнения.

Ответ 7

Джо Даффи обсуждает провал быстро и дисциплину, чтобы сделать это полезным, здесь.

http://joeduffyblog.com/2014/10/13/if-youre-going-to-fail-do-it-fast/

По сути, он сказал, что для программирования ошибок - то есть непредвиденных ошибок, которые являются ошибкой программиста, а не пользователя программы или других входных данных или ситуаций, которые могут быть разумными, как ожидается, будут плохими, - то было принято решение всегда быстро терпеть неудачу для непредвиденных ошибок. улучшить качество кода.

Я думаю, что поскольку это необязательное командное решение и дисциплина, использование этого API в С# встречается редко, поскольку на самом деле все мы в основном пишем LoB-приложения для 12 человек в HR или, в лучшем случае, в онлайн-магазине.

Так что для нас, мы могли бы использовать это, когда мы хотим лишить пользователя нашего API возможности делать какие-либо дальнейшие шаги.

Ответ 8

В документации Microsoft говорится, что если вы решите обработать/перехватить какое-то исключение, вам следует в своем блоке catch вызвать метод Enviroment.FailFast, чтобы этот метод завершил работу вашего приложения и добавил запись в журнал системных событий.