예제 #1
0
        public static IObservable <long> RandomTimer(
            Duration dueTime,
            Duration minPeriod,
            Duration maxPeriod,
            IScheduler scheduler = null)
        {
            return(Observable.Create <long>(o =>
            {
                scheduler = scheduler ?? Scheduler.Default;
                var rand = new RandomDuration(minPeriod, maxPeriod);
                long value = 0;

                IObservable <long> initial = Observable.Timer(dueTime, scheduler).Select(_ => value++);

                IObservable <long> rest =
                    Observable.Return(0, scheduler)
                    .SelectMany(_ => Observable.Timer(TimeSpan.FromMilliseconds(rand.Next()), scheduler))
                    .Select(_ => value++)
                    .Repeat();

                return initial.Concat(rest).Subscribe(o);
            }));
        }