Я реализую Polly, чтобы повторно повторно SQLConnection < /code> ошибки. < /p>
Это логика, которую мне нужно реализовать: < /p>
1 -е SQLException - повторение через 10 секунд. Через 5 секунд < /li>
< /ul>
// the following should retry with 5 second delays between tries, up to a 3-minute limit:
Policy timeoutAfter3Minutes = Policy.Timeout(TimeSpan.FromMinutes(3));
Policy retryEveryFiveSeconds = Policy.Handle()
.Or()
.Or()
.WaitAndRetryForever(sleepDurationProvider: i => TimeSpan.FromSeconds(5)
,(exception, retry, timespan) =>
{
Console.WriteLine($"Retry count is {retry} and timespan is {timespan} " + $"at {DateTime.Now.ToString("hh.mm.ss.ffffff")}");
});
// 1st (1 time only): retry after 10 sec
Policy retryFirstTime = Policy
.Handle()
.Or()
.Or()
.WaitAndRetry(1, sleepDurationProvider: i => TimeSpan.FromSeconds(10),
(Exception exception, TimeSpan timeSpan, int retryCount, Context _) =>
{
Console.WriteLine($"1st retrying SqlConnection on attempt : {retryCount} :
{exception.InnerException} " +
$"in {timeSpan.TotalSeconds} seconds");
});
// Wrap policy with Timeout Exception every 5 sec until 3 minutes
Policy tryEvery5SecondsUpTo3Minutes = timeoutAfter3Minutes.Wrap(retryEveryFiveSeconds);
// Wrap policy 1st retry after 10 seconds and other retries at 5 seconds until 3 minutes
Policy combinePolicy = Policy.Wrap(retryFirstTime, tryEvery10SecondsUpTo5Minutes);
// Usage
combinePolicy.Execute(() => reTryDB(conn));
public static void reTryDB(SqlConnection conn)
{
Console.WriteLine($"Open Sql con at {DateTime.Now.ToString("hh.mm.ss.ffffff")}");
conn.Open();
string selectCommand = "SELECT TOP 1 * FROM [dbo].[TAbleA]";
var command = new SqlCommand(selectCommand, conn);
try
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(String.Format("{0}", reader[0]));
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
}
< /code>
Здесь он возвращает каждые 5 секунд. Я не могу разделить 1 -й попытку через 10 секунд, и все остальные повторения каждые 5 секунд до максимум 3 минуты. < /P>
Может ли кто -нибудь дать мне идею, как я могу использовать PollyWrap для объединения этих 2 политик?
Подробнее здесь: https://stackoverflow.com/questions/794 ... retries-af
C# POLLY, 1 -я SQLEXCECTION RERY через 10 секунд, затем другие повторения через 5 секунд до общего числа 3 минут ⇐ C#
Место общения программистов C#
1739145585
Anonymous
Я реализую Polly, чтобы повторно повторно SQLConnection < /code> ошибки. < /p>
Это логика, которую мне нужно реализовать: < /p>
1 -е SQLException - повторение через 10 секунд. Через 5 секунд < /li>
< /ul>
// the following should retry with 5 second delays between tries, up to a 3-minute limit:
Policy timeoutAfter3Minutes = Policy.Timeout(TimeSpan.FromMinutes(3));
Policy retryEveryFiveSeconds = Policy.Handle()
.Or()
.Or()
.WaitAndRetryForever(sleepDurationProvider: i => TimeSpan.FromSeconds(5)
,(exception, retry, timespan) =>
{
Console.WriteLine($"Retry count is {retry} and timespan is {timespan} " + $"at {DateTime.Now.ToString("hh.mm.ss.ffffff")}");
});
// 1st (1 time only): retry after 10 sec
Policy retryFirstTime = Policy
.Handle()
.Or()
.Or()
.WaitAndRetry(1, sleepDurationProvider: i => TimeSpan.FromSeconds(10),
(Exception exception, TimeSpan timeSpan, int retryCount, Context _) =>
{
Console.WriteLine($"1st retrying SqlConnection on attempt : {retryCount} :
{exception.InnerException} " +
$"in {timeSpan.TotalSeconds} seconds");
});
// Wrap policy with Timeout Exception every 5 sec until 3 minutes
Policy tryEvery5SecondsUpTo3Minutes = timeoutAfter3Minutes.Wrap(retryEveryFiveSeconds);
// Wrap policy 1st retry after 10 seconds and other retries at 5 seconds until 3 minutes
Policy combinePolicy = Policy.Wrap(retryFirstTime, tryEvery10SecondsUpTo5Minutes);
// Usage
combinePolicy.Execute(() => reTryDB(conn));
public static void reTryDB(SqlConnection conn)
{
Console.WriteLine($"Open Sql con at {DateTime.Now.ToString("hh.mm.ss.ffffff")}");
conn.Open();
string selectCommand = "SELECT TOP 1 * FROM [dbo].[TAbleA]";
var command = new SqlCommand(selectCommand, conn);
try
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(String.Format("{0}", reader[0]));
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
}
< /code>
Здесь он возвращает каждые 5 секунд. Я не могу разделить 1 -й попытку через 10 секунд, и все остальные повторения каждые 5 секунд до максимум 3 минуты. < /P>
Может ли кто -нибудь дать мне идею, как я могу использовать PollyWrap для объединения этих 2 политик?
Подробнее здесь: [url]https://stackoverflow.com/questions/79425675/c-sharp-polly-1st-sqlexception-retry-after-10-seconds-then-other-all-retries-af[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия