Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }