public static IObservable <T> RetryAfter <T>(this IObservable <T> source, TimeSpan period, IScheduler scheduler = null)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            return(RepeatObservableExtensions.RepeatInfinite(source, period, scheduler).Catch());
        }
        public static IObservable <T> RetryAfter <T>(this IObservable <T> source, TimeSpan period, int count, Action <Exception> onError, IScheduler scheduler = null)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            return(RepeatObservableExtensions.RepeatFinite(source, i => period, count, scheduler).Do(_ => { }, onError).Catch());
        }