public static IObservable <T> Skip <T>(this IObservable <T> source, TimeSpan duration, IScheduler scheduler)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }
            if (scheduler == null)
            {
                throw new ArgumentNullException("scheduler");
            }

            // optimize .Skip(duration).Skip(duration)
            SkipObservable <T> skip = source as SkipObservable <T>;

            if (skip != null && skip.scheduler == scheduler)
            {
                return(skip.Combine(duration));
            }

            return(new SkipObservable <T>(source, duration, scheduler));
        }
        public static IObservable <T> Skip <T>(this IObservable <T> source, int count)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }
            if (count < 0)
            {
                throw new ArgumentOutOfRangeException("count");
            }

            // optimize .Skip(count).Skip(count)
            SkipObservable <T> skip = source as SkipObservable <T>;

            if (skip != null && skip.scheduler == null)
            {
                return(skip.Combine(count));
            }

            return(new SkipObservable <T>(source, count));
        }