Generyczny retry w C#

Ostatnio w trakcie pracy nad projektem składającym się z kilku rozproszonych, komunikujących się ze sobą komponentów napotkałem problem, którego przyczyny nie były i wciąż nie są do końca jasne. Raz na jakiś czas (bardzo rzadko) pewna operacja kończyła się błędem. Najprawdopodobniej jest to związane z konfiguracją hardware’u lub systemu operacyjnego, ale nie to jest tutaj istotne. Czasem potrzebna jest nam logika, która ponowi operację jeżeli poprzednia próba zakończy się niepowodzeniem. W tym poście chciałbym przedstawić bardzo prostą logikę, którą można wykorzystać w takich sytuacjach.

Na początek warto zdefiniować konkretny typ błędu, który będzie zwracany w momencie przekroczenia limitu prób wykonania danej operacji.

Główny bohater to statyczna klasa Retry z dwoma publicznymi funkcjami Execute. Obie funkcje zachowują się identycznie. Różnicę stanowi tylko i wyłącznie zwrot. Jedna z nich nie zwraca nic (void), druga może zwrócić dowolny obiekt. Przedstawiona wersja sprawdziła się bardzo dobrze w moim projekcie. Być może przyda się również Tobie. Musimy jednak pamiętać, że jest to rozwiązanie ostateczne. Najlepszą i najbardziej pożądaną opcją jest znalezienie przyczyny błędu i jego naprawa u źródła.

 

2 komentarzy dotyczących “Generyczny retry w C#

    1. Hej Michał. Niestety nie natknąłem się wcześniej na tą bibliotekę. A szkoda, bo dostarcza wszystko czego potrzebowałem w moim projekcie i to w bardzo elegancki sposób. W najbliższej wolnej chwili przetestuję ją u siebie. Bardzo dziękuję za informację!

Dodaj komentarz

Twój adres email nie będzie opublikowany. Pola wymagane zostały oznaczone *