/// <summary>
        /// Отлов ошибок и вызов метода асинхронно
        /// </summary>
        public static async Task <IResultValue <T> > ExecuteAndHandleErrorAsync <T>(Func <Task <T> > asyncFunc, Action beforeMethod = null,
                                                                                    Action catchMethod        = null, Action finallyMethod = null,
                                                                                    IErrorCommon errorMessage = null)
        {
            if (asyncFunc == null)
            {
                throw new ArgumentNullException(nameof(asyncFunc));
            }

            IResultValue <T> result;

            try
            {
                beforeMethod?.Invoke();
                result = new ResultValue <T>(await asyncFunc.Invoke());
            }
            catch (Exception exception)
            {
                catchMethod?.Invoke();
                result = new ErrorCommon(GetTypeException(exception), String.Empty, exception).
                         ToResultValue <T>().
                         ConcatErrors(errorMessage);
            }
            finally
            {
                finallyMethod?.Invoke();
            }

            return(result);
        }
        /// <summary>
        /// Отлов ошибок и суммирование ошибок для модуля конвертации
        /// </summary>
        public static IResultValue <T> ExecuteBindResultValue <T>(Func <IResultValue <T> > method, IErrorCommon errorMessage = null)
        {
            IResultValue <T> result;

            try
            {
                result = method.Invoke();
            }
            catch (Exception ex)
            {
                result = new ErrorCommon(GetTypeException(ex), String.Empty, ex).
                         ToResultValue <T>().
                         ConcatErrors(errorMessage);
            }
            return(result);
        }