Zamykanie aplikacji w przypadku awarii: Environment.FailFast

Wszyscy dążymy do oprogramowania, które zawsze działa ale oczywiście musimy przygotować się na przypadki w których wystąpił wyjątek i nie wiadomo jak go obsłużyć. Najgorszą reakcją jest oczywiście pozwolenie aplikacji dalej działać co może spowodować nieoczekiwane efekty oraz popsuć po prostu dane. Musimy wszystko zrobić aby nie dopuścić do niespójności danych. W przypadku gdy wiemy, że aplikacja nie może kontynuować swojego działania musimy bezwzględnie zakończyć cały proces albo AppDomain. Należy po prostu odizolować “zepsuty” fragment procesu. Z tego względu korzystanie z AppDomain jest wysoce pożądane (szczególnie dla aplikacji serwerowych, które muszą bez przerwy działać). W tym poście chciałbym przedstawić  metodę Enviroment.FailFast, która wykonuje następujące czynności:

  1. Zamyka natychmiast aplikację, przerywając nawet wykonywanie klauzuli finally.
  2. Wykonuje zrzut pamięci.
  3. Wykonuje log, który można później zobaczyć w Event Viewer.

Zdecydowanie powinniśmy preferować Enviroment.FailFast zamiast Enviroment.Exit, który po prostu zamyka aplikację i nie dostarcza żadnych wartościowych danych, które mogą być potem przydatne dla programistów. Przykład:

private static void Main(string[] args)
{
   try
   {
       //brzydkie ale tylko dla testow
       throw new Exception();
   }
   catch // oczywiscie brzydkie, w praktyce podaje sie specyficzne wyjatki
   {
       Environment.FailFast("Jakis komunikat");
   }
}

Jako parametr podajemy jakiś tekst, opisujący przyczynę awarii. Pod odpaleniu aplikacji zobaczymy Microsoft’owy komunikat błędu:

image

 

W taki sposób możemy oczywiście debugować aplikację. W EventViewer z kolei również powstał odpowiedni wpis:

image

2 thoughts on “Zamykanie aplikacji w przypadku awarii: Environment.FailFast”

  1. “Najgorszą reakcją jest oczywiście pozwolenie aplikacji dalej działać …”
    Moim zdaniem jakby ktoś zakończył czytanie tego artykułu na tym zdaniu mógłby wynieść błędne wnioski na przyszłość. Pozwolenie aplikacji dalej działać (pełna obsługa wyjątku) jest najlepszą reakcją, której jednak zazwyczaj nie da się osiągnąć.

  2. @wojtek:
    Mam nadzieje, ze posty nie sa czytane po naglowkach;)
    Ale slowo “pozwolenie” sugeruje ze nic nie robimy tylko ignorujemy a to jest ZAWSZE zle…

Leave a Reply

Your email address will not be published.