/// <summary> /// Extension of 'Try' that will automatically log any thrown exceptions /// </summary> /// <param name="logger">Logger to use when an unhandled exception is caught</param> /// <param name="workload"></param> /// <returns></returns> public static Do <T> Try(ILogger logger, Func <IResult <T>, T> workload) { var d = new Do <T>(workload); try { d.Result.ResultObject = workload(d.Result); } catch (Exception ex) { d.Exception = ex; d.Result.AddExceptionError(ex.GetType().Name, ex); logger?.LogError(d.Result.ListErrors()); } return(d); }
/// <summary> /// Tries to run the given workload the indicated number of times /// </summary> /// <param name="logger">Logger used to log errors with</param> /// <param name="workload">Workload to be performed</param> /// <param name="retry">Number of retries that should be performed. If value is /// zero, will not retry</param> /// <returns></returns> public static Do <T> Try(ILogger logger, uint retry, Func <IResult <T>, T> workload) { if (retry == 0) { return(Try(logger, workload)); } var attempts = 0; Do <T> d = null; while (attempts != retry) { d = Try(logger, workload); if (!d.Result.HasErrors) { break; } attempts++; } return(d); }