Darabonba/RetryPolicy/ExponentialBackoffPolicy.cs (20 lines of code) (raw):
using System;
namespace Darabonba.RetryPolicy
{
public class ExponentialBackoffPolicy : BackoffPolicy
{
private readonly int? Period;
public readonly long? Cap;
public ExponentialBackoffPolicy(int? period, long? cap = 3L * 24 * 60 * 60 * 1000)
: base(null)
{
Period = period;
Cap = cap;
}
public override long? GetDelayTime(RetryPolicyContext ctx)
{
double potentialTime = Math.Pow(2.0, (double)ctx.RetriesAttempted) * (double)Period;
return (long?)Math.Min((double)Cap, potentialTime);
}
}
}