private const int IntervalsCount = 13;
public static void Main()
Console.WriteLine($"Intervals count: {IntervalsCount}");
var intervals = RetryLogicHelper.GetExponentialWaitIntervals(IntervalsCount);
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(intervals));
foreach (TimeSpan t in intervals)
totalSeconds+=t.TotalSeconds;
var total = TimeSpan.FromSeconds(totalSeconds);
Console.WriteLine("Total time: " + total);
public static class RetryLogicHelper
public static double GetExponentialWaitTimeMilliseconds(int retryAttempt) => 1000 * (Math.Pow(2, retryAttempt)-1);
public static TimeSpan[] GetExponentialWaitIntervals(int maxRetryCount)
var result = new TimeSpan[maxRetryCount];
for (var i = 1; i <= maxRetryCount; i++)
result[i - 1] = TimeSpan.FromMilliseconds(GetExponentialWaitTimeMilliseconds(i + 2));