public async Task <T> HandleAsync <T>(Func <Task <T> > tryFunc, Action <Exception> catchFunc = null, Func <Task> finallyFunc = null) { T result = default; var attempts = 0; var success = false; while (!success && attempts < Options.MaximumAttempts) { result = await TryCatchHandler.HandleAsync(async() => { var value = await tryFunc(); success = true; return(value); }, async(ex) => { await Task.CompletedTask; catchFunc?.Invoke(ex); Thread.Sleep(Options.Timeout); attempts++; }, finallyFunc, catchExceptionTypesArray : Options.ExceptionTypes.ToArray()); } return(result); }
public Task <T> HandleAsync(Func <Task <T> > tryFunc, Func <Exception, Task> catchFunc, Func <Task> finallyFunc = null, params Type[] catchExceptionTypesArray) { return(TryCatchHandler.HandleAsync(tryFunc, catchFunc, finallyFunc, catchExceptionTypesArray: catchExceptionTypesArray)); }