hermes-common-library/Backoff/ExponentialBackoff.cs

32 lines
776 B
C#

namespace CommonSocketLibrary.Backoff
{
public class ExponentialBackoff : IBackoff
{
private int _initial;
private int _current;
private int _maximum;
public ExponentialBackoff(int initial, int maximum)
{
if (maximum < initial)
throw new InvalidOperationException("Initial backoff cannot be larger than maximum backoff.");
_initial = initial;
_maximum = maximum;
Reset();
}
public TimeSpan GetNextDelay()
{
_current = Math.Min(_current * 2, _maximum);
return TimeSpan.FromMilliseconds(_current);
}
public void Reset()
{
_current = _initial / 2;
}
}
}