using System; using Polly.Retry; using Polly; using System.Threading.Tasks; namespace PlexRequests.Api { public static class RetryHandler { private static readonly 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, action); 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); } } }