using System; using Polly.Retry; using Polly; using System.Threading.Tasks; namespace PlexRequests.Api { public static class RetryHandler { private static TimeSpan[] DefaultTime = new TimeSpan[] { TimeSpan.FromSeconds (2), TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(10)}; public static RetryPolicy RetryAndWaitPolicy(TimeSpan[] timeSpan, Action action) { if(timeSpan == null) { timeSpan = DefaultTime; } var policy = Policy.Handle () .WaitAndRetry(timeSpan, (e, ts) => action()); return policy; } public static RetryPolicy RetryAndWaitPolicy(TimeSpan[] timeSpan) { if(timeSpan == null) { timeSpan = DefaultTime; } var policy = Policy.Handle () .WaitAndRetry(timeSpan); return policy; } public static RetryPolicy RetryAndWaitPolicy(TimeSpan[] timeSpan, Action action) { if(timeSpan == null) { timeSpan = DefaultTime; } var policy = Policy.Handle () .WaitAndRetry(timeSpan, (exception, ts) => action(exception, ts)); return policy; } public static T Execute(Func action, TimeSpan[] timeSpan) { var policy = RetryAndWaitPolicy (timeSpan); return policy.Execute (action); } public static T Execute(Func func, TimeSpan[] timeSpan, Action action) { if(timeSpan == null) { timeSpan = DefaultTime; } var policy = RetryAndWaitPolicy (timeSpan, action); return policy.Execute (func); } } }