public static TRsp CallWithRetries <TRq, TRsp>( this ISyncContext context, TRq request, string taskName, int retriesCount, Func <TRsp> requestMaker) { var resp = default(TRsp); var retries = retriesCount + 1; while (retries-- > 0) { try { resp = requestMaker(); } // Отмену пользователем не трактуем как ошибку и выкидываем наверх catch (UserCancelledException) { throw; } catch (Exception ex) { if (retries > 0) { context.LogWarning(SyncResources.ErrorMessage.FormatStr(ex.Message)); context.TryAddSyncError( new SyncErrorInfo(SyncErrorType.Warning, taskName, ex.ToString())); context.CheckState(); continue; } throw; } break; } return(resp); }