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; } } }