/// <summary> /// Выполнить функцию для сервиса, проверить на ошибки и выполнить повторное подключение при сбое /// </summary> public async Task <IResultValue <TResult> > UsingServiceRetry <TResult>(Expression <Func <TService, Task <TResult> > > serviceExpression, RetryService retryService) => await UsingServiceDefault(serviceExpression). ResultVoidBadBindAsync(_ => Task.Delay(RetryService.RetryDelayMilliseconds)). ResultValueBadBindAsync(errors => retryService.IsRetryLast() ? Task.FromResult((IResultValue <TResult>) new ResultValue <TResult>(errors)) : UsingServiceRetry(serviceExpression, retryService.NextRetry()));
protected WcfServiceFactory(Func <TService> getService, RetryService retryService) { _getService = getService ?? throw new ArgumentNullException(nameof(getService)); _retryService = retryService ?? throw new ArgumentNullException(nameof(retryService)); }