Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

インターバルと試行回数を指定できるRetryの作り方

$
0
0

Reactive Extensionsには回数指定のリトライか、無限リトライしか用意されてません。世の中には、一定間隔をあけてリトライ処理をしたいという需要もあります。ということで、さくっと試してみました・

staticclass Ex
{
    publicstatic IObservable<T> RetryEx<T>(this IObservable<T> self, int retryCount, TimeSpan retrySpan)
    {
        int count = 0;
        IObservable<T> retry = null;
        retry = self.Catch((Exception ex) =>
            {
                if (count++ < retryCount)
                {
                    // retryreturn retry.DelaySubscription(retrySpan);
                }

                return Observable.Throw<T>(ex);
            });
        return retry;
    }
}

リトライ回数の以下ならDelaySubscriptionで、Subscribeを遅延させて、リトライの回数を超えていたら例外を投げています。

因みに、ReactivePropertyには、これをもっとしっかり作ったOnErrorRetryというメソッドが用意されてるので、お勧めしておきます。


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>