Exemple #1
0
        private void ExecuteAndReschedule(ISchedulerTask task)
        {
            task.Execute();
            tasks[task].Dispose();
            int    seed = (int)(DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() & (long)int.MaxValue);
            Random rnd  = new Random(seed);

            long randomInterval = Convert.ToInt32(task.Interval.TotalMilliseconds)
                                  + (rnd.Next(
                                         Convert.ToInt32(-(task.RangeSize.TotalMilliseconds / 2)),
                                         Convert.ToInt32(task.RangeSize.TotalMilliseconds / 2)));

            if (randomInterval < 0)
            {
                randomInterval = 0;
            }
            log.Debug($"[{task}] Scheduling next task in {randomInterval} ms");

            var timer = new Timer((e) => ExecuteAndReschedule(task),
                                  null, randomInterval, Timeout.Infinite);

            tasks[task] = timer;
        }