Este padrão de desenvolvimento foi criado para tratar erros e exceções que são previstos e podem ocorrer, independentemente das precauções que o programador pode tomar.
Uma aplicação web que depende de um banco de dados pode implementar este padrão para, caso ocorra algum erro de comunicação com o banco de dados, tente novamente X vezes.
Situações que este padrão pode não se aplicar:
- Quando o erro não é algo rápido, pois isso afetar diretamente a capacidade de resposta da aplicação. Pode ser que, ao aplicar este padrão, você esteja desperdiçando tempo e recursos em requisições que, provavelmente, vão falhar;
- Tratar erros e exceções causados por erros em lógica de negócio;
- Como uma alternativa para abordar problemas de escalabilidade em um sistema;
O exemplo abaixo não é dos mais simples, mas demonstra bem o padrão Retry:
public class Retrier<TResult> { public TResult Try(Func<TResult> func, int maxRetries) { TResult returnValue = default(TResult); int numTries = 0; bool succeeded = false; while (numTries < maxRetries) { try { returnValue = func(); succeeded = true; } catch (Exception) { //todo: figure out what to do here } finally { numTries++; } if (succeeded) return returnValue; } return default(TResult); } public TResult TryWithDelay(Func<TResult> func, int maxRetries, int delayInMilliseconds) { TResult returnValue = default(TResult); int numTries = 0; bool succeeded = false; while (numTries < maxRetries) { try { returnValue = func(); succeeded = true; } catch (Exception) { //todo: figure out what to do here } finally { numTries++; } if (succeeded) return returnValue; System.Threading.Thread.Sleep(delayInMilliseconds); } return default(TResult); } }
Referências:
- https://msdn.microsoft.com/en-us/library/dn589788.aspx
- https://blogs.msdn.microsoft.com/dgartner/2010/03/09/trying-and-retrying-in-c/
The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Latest posts by Breno RdV (see all)
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022
- Ordenando um DataFrame por múltiplas colunas. (#python #pandas #jupyter #dev #data) - agosto 3, 2022
Pingback: Utilizando Python para verificar se um arquivo existe – Raccoon Ninja