public PeriodicTask(Action task, IndexedMultipleDisposable d, long start, TimeSpan period, ITimedScheduling scheduler)
 {
     this.task      = task;
     this.start     = start;
     this.d         = d;
     this.scheduler = scheduler;
 }
        /// <inheritdoc/>
        public IDisposable Schedule(Action task, TimeSpan initialDelay, TimeSpan period)
        {
            IndexedMultipleDisposable d = new IndexedMultipleDisposable();

            long         start = NowUtc + (long)initialDelay.TotalMilliseconds;
            PeriodicTask t     = new PeriodicTask(task, d, start, period, this);

            d.Replace(Schedule(t.Run, initialDelay), 0);

            return(d);
        }