Este post foi editado pela última vez por Kongcida em 29-05-2019 às 23:16
prefácio Em um projeto, haverá problemas na operação do projeto devido a razões incontroláveis. Por exemplo, uma falha de servidor, uma falha de serviço, queda de rede, etc. Encontrando alguns erros retentáveis, podemos usar o Polly —— . Bibliotecas de Tratamento de Falhas Elásticas e Transitórias .NET. Endereço oficial do site do projeto (O login do hiperlink está visível.)。 Hoje, este artigo vai documentar a má estratégia de tentativas de Polly.
Ambiente e Ferramentas
>VS 2017
>Sistema Windows 10
Texto
1: Criar um novo aplicativo de console.
2: Cita Polly. Disponível para download no pacote NuGet
3: Cole o código
4: F6 gera. Depois, encontre o arquivo .exe gerado na pasta de depuração – > clique duas vezes para executar.
Você pode ver a mensagem de saída: Tentado novamente três vezes.
Quando o F5 está depurando, você também pode ver que esse método já foi feito três vezes.
A estratégia de retentativa da Polly é explicada em detalhes
1: Tipo de exceção
Neste código, o :handle contém o tipo de exceção a ser tentado novamente. Ou seja, quando o código executado produz uma exceção específica, a função de tentativa é executada. Caso contrário, nenhuma tentativa será realizada. Porque algumas exceções não exigem uma nova tentativa.
Claro, podemos preencher vários tipos específicos de exceção aqui para tentar novamente.
O DivideByZeroException aqui representa uma exceção que tenta dividir por zero. SqlException indica uma exceção que é levantada quando o SqlServer retorna um erro ou aviso. Por exemplo, falha na conexão com banco de dados, erro de execução SQL, etc. SmtpException indica uma exceção levantada pelo serviço postal. Por exemplo, o envio falhou, a conexão de rede falhou e as informações da conta de e-mail ficaram anormais.
Para tipos específicos de exceção, consulte a documentação oficial da Microsoft:
2: Tipo de tentativa
1) O primeiro tipo de tentativa é um número direto determinado de tentativas. O código a seguir é tentado novamente apenas 3 vezes.
Podemos chamar as ações relevantes realizadas em cada tentativa ao tentar novamente. O código a seguir é outra encomenda posterior. Ao realizar uma tentativa novamente, o número de tentativas e o motivo da exceção são impressos.
Também podemos manter o código tentando novamente até que dê certo.
2) O segundo tipo de tentativa é tentar novamente em intervalos. O código a seguir significa tentar novamente a cada 2 segundos, 7 segundos ou 10 segundos. Retente para 10 segundos. Se a execução não for bem-sucedida, encerre a tentativa novamente.
Também podemos tentar novamente em intervalos até que a tentativa seja bem-sucedida. Isso requer o cálculo de uma função.
O código acima refere-se à tentativa de potência do indireto 2. Por exemplo, se a execução falhar, a primeira vez será tentada novamente em intervalos de 2 segundos, a segunda será tentada novamente em intervalos de 4 segundos e a terceira será tentada novamente em intervalos de 8 segundos......... E assim por diante. Até que a execução seja bem-sucedida.
Epílogo
Nota: Os tipos de exceção no código Handle acima devem ser preenchidos de acordo com a situação real no seu projeto real. Nem todas as exceções exigem uma tentativa de novo.
O tipo de exceção é a classe base para todas as exceções. É melhor não preencher isso na alça, caso contrário, isso terá consequências muito sérias.
|