public static void Main() => simulateRetries(
desiredTotalTime: TimeSpan.FromMinutes(10),
delay: Retrier.Delays.Exponential(TimeSpan.FromSeconds(0.25), max: TimeSpan.FromMinutes(5)));
private static void simulateRetries(TimeSpan desiredTotalTime, Func<int, TimeSpan> delay){
Console.WriteLine("attempt delay before total");
TimeSpan totalElapsed = TimeSpan.Zero;
logAttempt(0, TimeSpan.Zero, totalElapsed);
for(int retry = 0; true; retry++){
TimeSpan retryDelay = delay(retry);
totalElapsed += retryDelay;
if(totalElapsed <= desiredTotalTime){
logAttempt(retry+1, retryDelay, totalElapsed);
void logAttempt(int attempt, TimeSpan delay, TimeSpan total) => Console.WriteLine($"{attempt,7} {delay:hh\\:mm\\:ss\\.fff} {total:hh\\:mm\\:ss\\.fff}");