I needed to clear up my understanding about Polly, retries and exception. I like how clean this console app in .Net 6 is.
I answered a question on StackOverflow in November, 2018.
using Polly;
var retry = Policy
.Handle<Exception>()
.WaitAndRetry(2, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)),
onRetry: (exception, calculatedWaitDuration) =>
{
Console.WriteLine($"Failed attempt. Waited for {calculatedWaitDuration}. Retrying. {exception.Message}. {exception.ToString()}");
});
try
{
var count = 1;
retry.Execute(() =>
{
Console.WriteLine("start");
Console.WriteLine("Hello, World!");
if (true)// count == 1)
{
count++;
throw new Exception("Boom!");
}
Console.WriteLine("end");
});
}
catch (Exception)
{
Console.WriteLine("Catch");
throw;
}
Here’s the output in the console:
start
Hello, World!
Failed attempt. Waited for 00:00:02. Retrying. Boom!. System.Exception: Boom!
at Program.<>c__DisplayClass0_0.<<Main>$>b__2() in c:\chr\PollyTest\Program.cs:line 21
at Polly.Policy.<>c__DisplayClass108_0.<Execute>b__0(Context ctx, CancellationToken ct)
at Polly.Policy.<>c__DisplayClass138_0.<Implementation>b__0(Context ctx, CancellationToken token)
at Polly.Retry.RetryEngine.Implementation[TResult](Func`3 action, Context context, CancellationToken cancellationToken, ExceptionPredicates shouldRetryExceptionPredicates, ResultPredicates`1 shouldRetryResultPredicates, Action`4 onRetry, Int32 permittedRetryCount, IEnumerable`1 sleepDurationsEnumerable, Func`4 sleepDurationProvider)
start
Hello, World!
Failed attempt. Waited for 00:00:04. Retrying. Boom!. System.Exception: Boom!
at Program.<>c__DisplayClass0_0.<<Main>$>b__2() in c:\chr\PollyTest\Program.cs:line 21
at Polly.Policy.<>c__DisplayClass108_0.<Execute>b__0(Context ctx, CancellationToken ct)
at Polly.Policy.<>c__DisplayClass138_0.<Implementation>b__0(Context ctx, CancellationToken token)
at Polly.Retry.RetryEngine.Implementation[TResult](Func`3 action, Context context, CancellationToken cancellationToken, ExceptionPredicates shouldRetryExceptionPredicates, ResultPredicates`1 shouldRetryResultPredicates, Action`4 onRetry, Int32 permittedRetryCount, IEnumerable`1 sleepDurationsEnumerable, Func`4 sleepDurationProvider)
start
Hello, World!
Catch
Unhandled exception. System.Exception: Boom!
at Program.<>c__DisplayClass0_0.<<Main>$>b__2() in c:\chr\PollyTest\Program.cs:line 21
at Polly.Policy.<>c__DisplayClass108_0.<Execute>b__0(Context ctx, CancellationToken ct)
at Polly.Policy.<>c__DisplayClass138_0.<Implementation>b__0(Context ctx, CancellationToken token)
at Polly.Retry.RetryEngine.Implementation[TResult](Func`3 action, Context context, CancellationToken cancellationToken, ExceptionPredicates shouldRetryExceptionPredicates, ResultPredicates`1 shouldRetryResultPredicates, Action`4 onRetry, Int32 permittedRetryCount, IEnumerable`1 sleepDurationsEnumerable, Func`4 sleepDurationProvider)
at Polly.Retry.RetryPolicy.Implementation[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
at Polly.Policy.Implementation(Action`2 action, Context context, CancellationToken cancellationToken)
at Polly.Policy.Execute(Action`2 action, Context context, CancellationToken cancellationToken)
at Polly.Policy.Execute(Action action)
at Program.<Main>$(String[] args) in c:\chr\PollyTest\Program.cs:line 14
c:\chr\PollyTest\bin\Debug\net6.0\PollyTest.exe (process 18660) exited with code 0.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
Press any key to close this window . . .
I encourage you to watch (Building resilient cloud services with .NET 8 | .NET Conf 2023)[https://www.youtube.com/watch?v=BDZpuFI8mMM&list=PLdo4fOcmZ0oULyHSPBx-tQzePOYlhvrAU&index=14] and look into version 8
Please consider using Brave and adding me to your BAT payment ledger. Then you won't have to see ads! (when I get to $100 in Google Ads for a payout, I pledge to turn off ads)
Also check out my Resources Page for referrals that would help me.