private TransientErrorInfoPeriodic GetExistingOrNewErrorInfo(TKey key)
        {
            TransientErrorInfoPeriodic transientErrorInfoPeriodic = null;

            if (!this.m_errorTable.TryGetValue(key, out transientErrorInfoPeriodic))
            {
                transientErrorInfoPeriodic = new TransientErrorInfoPeriodic(this.m_successTransitionSuppression, this.m_successPeriodicInterval, this.m_failureTransitionSuppression, this.m_failurePeriodicInterval, this.m_initialState);
                this.m_errorTable[key]     = transientErrorInfoPeriodic;
            }
            return(transientErrorInfoPeriodic);
        }
        public bool ReportFailurePeriodic(TKey key, out TransientErrorInfo.ErrorType currentState)
        {
            TransientErrorInfoPeriodic existingOrNewErrorInfo = this.GetExistingOrNewErrorInfo(key);

            return(existingOrNewErrorInfo.ReportFailurePeriodic(out currentState));
        }