Varying the Time Between Polly Retries Based on the Result
Full source code available here.
When using the Polly Wait and Retry with a HandleResult it is possible to vary the delay between retries based on the value of the result.
The policy is below. The Result type is a Status enum. The sleepDurationProvider takes the retry count, the result, and the context as parameters. The attached zip has a console application with a fully working example.
If the Status is Unknown, the delay period is 1 second, if the Status is any other non-success status, the delay is 2 seconds.
1ISyncPolicy<Status> waitAndRetryPolicyHandlesResult = Policy.HandleResult<Status>(s => s != Status.Success)
2 .WaitAndRetry(5,
3 sleepDurationProvider: (retryCount, status, ctx) =>
4 {
5 if (status.Result == Status.Unknown)
6 {
7 return TimeSpan.FromSeconds(1);
8 }
9 else
10 {
11 return TimeSpan.FromSeconds(2);
12 }
13 },
14 onRetry: (status, timeSpan, retryCount, ctx) =>
15 {
16 Console.WriteLine($"Got a response of {status.Result}, retrying {retryCount}. Delaying for {timeSpan}");
17 }
18 );Here is the output.

Full source code available here.