Example #1
0
        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);
        }