using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace SqlSugar { public static class SugarRetry { public static void Execute(Action action, TimeSpan retryInterval, int retryCount = 3) { Execute(() => { action(); return null; }, retryInterval, retryCount); } public static void Execute(Action action, T1 arg1, TimeSpan retryInterval, int retryCount = 3) { Execute((x1) => { action(arg1); return null; }, arg1, retryInterval, retryCount); } public static void Execute(Action action, T1 arg1, T2 arg2, TimeSpan retryInterval, int retryCount = 3) { Execute((x1, x2) => { action(arg1, arg2); return null; }, arg1, arg2, retryInterval, retryCount); } public static void Execute(Action action, T1 arg1, T2 arg2, T3 arg3, TimeSpan retryInterval, int retryCount = 3) { Execute((x1, x2, x3) => { action(arg1, arg2, arg3); return null; }, arg1, arg2, arg3, retryInterval, retryCount); } public static void Execute(Action action, T1 arg1, T2 arg2, T3 arg3, T4 arg4, TimeSpan retryInterval, int retryCount = 3) { Execute((x1, x2, x3, x4) => { action(arg1, arg2, arg3, arg4); return null; }, arg1, arg2, arg3, arg4, retryInterval, retryCount); } public static T Execute(Func func, TimeSpan retryInterval, int retryCount = 3) { var exceptions = new List(); for (int retry = 0; retry < retryCount; retry++) { try { return func(); } catch (Exception ex) { exceptions.Add(ex); Thread.Sleep(retryInterval); } } throw new AggregateException(exceptions); } public static T Execute(Func func, T1 arg1, TimeSpan retryInterval, int retryCount = 3) { var exceptions = new List(); for (int retry = 0; retry < retryCount; retry++) { try { return func(arg1); } catch (Exception ex) { exceptions.Add(ex); Thread.Sleep(retryInterval); } } throw new AggregateException(exceptions); } public static T Execute(Func func, T1 arg1, T2 arg2, TimeSpan retryInterval, int retryCount = 3) { var exceptions = new List(); for (int retry = 0; retry < retryCount; retry++) { try { return func(arg1, arg2); } catch (Exception ex) { exceptions.Add(ex); Thread.Sleep(retryInterval); } } throw new AggregateException(exceptions); } public static T Execute(Func func, T1 arg1, T2 arg2, T3 arg3, TimeSpan retryInterval, int retryCount = 3) { var exceptions = new List(); for (int retry = 0; retry < retryCount; retry++) { try { return func(arg1, arg2, arg3); } catch (Exception ex) { exceptions.Add(ex); Thread.Sleep(retryInterval); } } throw new AggregateException(exceptions); } public static T Execute(Func func, T1 arg1, T2 arg2, T3 arg3, T4 arg4, TimeSpan retryInterval, int retryCount = 3) { var exceptions = new List(); for (int retry = 0; retry < retryCount; retry++) { try { return func(arg1, arg2, arg3, arg4); } catch (Exception ex) { exceptions.Add(ex); Thread.Sleep(retryInterval); } } throw new AggregateException(exceptions); } } }