Когда ваше приложение зависит от внешних интеграций (в данном случае от вашей базы данных), которые могут быть недоступны в течение небольших периодов времени из-за исправлений, сбоя сети и т. Д., Его
подходит для реализации политики повторных попыток. Логика повторных попыток будет зависеть от того, как вы ее настроите, повторно выполнить код через определенное время, если произойдет конкретное исключение.
Вот пример того, как реализовать простую логику повторных попыток с помощью инфраструктуры Polly , которая будет перезапускать ваш код три раза в течение десятисекундного промежутка, если возникнет исключение, содержащее ORA-03114
. Если код все еще выдает то же самое исключение после третьего раза, исключение пойдет, бросьте.
var retryTimes = 3;
var waitBetweenExceptions = TimeSpan.FromSeconds(10);
var retryPolicy = Policy
.Handle<OracleException>(e => e.Message.Contains("ORA-03114"))
.WaitAndRetry(retryTimes, i => waitBetweenExceptions);
await retryPolicy.Execute(() =>
{
string cs = "Data Source = 172.10.200.100:1521/dev;PERSIST SECURITY INFO=True;USER ID=test; Password=devtest;";
using (OracleConnection connection = new OracleConnection(cs)){
connection.Open();
using (OracleCommand cmd = connection.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_check_db";
cmd.ExecuteNonQuery();
connection.Close();
}
}
});