Darabonba/RetryPolicy/RandomBackoffPolicy.cs (21 lines of code) (raw):

using System; namespace Darabonba.RetryPolicy { public class RandomBackoffPolicy : BackoffPolicy { private readonly int? Period; private readonly long? Cap; public RandomBackoffPolicy(int? period, long? cap = 2000) : base(null) { Period = period; Cap = cap; } public override long? GetDelayTime(RetryPolicyContext ctx) { Random random = new Random(); double randomTime = random.NextDouble() * Math.Min((double)Cap, (double)(Period * ctx.RetriesAttempted)); return (long?)randomTime; } } }