Exemple #1
0
        public DateTimeOffset?ScheduleNext(DateTimeOffset from)
        {
            if (!delayFirstIteration && scheduledFirst.TrySetTrue())
            {
                return(from);
            }

            var period = periodProvider();
            var jitter = jitterProvider();

            period = TimeSpanArithmetics.Max(TimeSpan.Zero, period);
            jitter = Math.Max(0d, jitter);
            jitter = Math.Min(1d, jitter);

            var next = from + period;

            if (jitter > 0d)
            {
                next += period.Multiply(ThreadSafeRandom.NextDouble() * jitter * (ThreadSafeRandom.FlipCoin() ? 1d : -1d));
            }

            return(next);
        }