/// <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); }