Darabonba/RetryPolicy/FullJitterBackoffPolicy.cs (22 lines of code) (raw):

using System; namespace Darabonba.RetryPolicy { public class FullJitterBackoffPolicy : BackoffPolicy { private readonly int? Period; private readonly long? Cap; public FullJitterBackoffPolicy(int? period, long? cap = 3L * 24 * 60 * 60 * 1000) : base(null) { Period = period; Cap = cap; } public override long? GetDelayTime(RetryPolicyContext ctx) { double ceil = Math.Min((double)Cap, (double)(Math.Pow(2.0, (double)ctx.RetriesAttempted) * Period)); Random random = new Random(); double delay = random.NextDouble() * ceil; return (long?)delay; } } }