public SqlRetryLogic(int numberOfTries,
                             SqlRetryIntervalBaseEnumerator enumerator,
                             Predicate <Exception> transientPredicate,
                             Predicate <string> preCondition)
        {
            Debug.Assert(enumerator != null, $"The '{nameof(enumerator)}' mustn't be null.");
            Debug.Assert(transientPredicate != null, $"The '{nameof(transientPredicate)}' mustn't be null.");

            if (!(numberOfTries > counterDefaultValue && numberOfTries <= maxAttempts))
            {
                // The 'numberOfTries' should be between 1 and 60.
                throw SqlReliabilityUtil.ArgumentOutOfRange(nameof(numberOfTries), numberOfTries, counterDefaultValue + 1, maxAttempts);
            }

            NumberOfTries           = numberOfTries;
            RetryIntervalEnumerator = enumerator;
            TransientPredicate      = transientPredicate;
            PreCondition            = preCondition;
            Current = counterDefaultValue;
        }
Esempio n. 2
0
        /// <include file='../../../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlRetryIntervalBaseEnumerator.xml' path='docs/members[@name="SqlRetryIntervalBaseEnumerator"]/Validate/*' />
        protected virtual void Validate(TimeSpan timeInterval, TimeSpan maxTimeInterval, TimeSpan minTimeInterval)
        {
            if (minTimeInterval < _minValue || minTimeInterval > _maxValue)
            {
                throw SqlReliabilityUtil.ArgumentOutOfRange(nameof(minTimeInterval), minTimeInterval, _minValue, _maxValue);
            }

            if (maxTimeInterval < _minValue || maxTimeInterval > _maxValue)
            {
                throw SqlReliabilityUtil.ArgumentOutOfRange(nameof(maxTimeInterval), maxTimeInterval, _minValue, _maxValue);
            }

            if (timeInterval < _minValue || timeInterval > _maxValue)
            {
                throw SqlReliabilityUtil.ArgumentOutOfRange(nameof(timeInterval), timeInterval, _minValue, _maxValue);
            }

            if (maxTimeInterval < minTimeInterval)
            {
                throw SqlReliabilityUtil.InvalidMinAndMaxPair(nameof(minTimeInterval), minTimeInterval, nameof(maxTimeInterval), maxTimeInterval);
            }
        }