Beispiel #1
0
        /// <summary>
        /// Пытается 1 раз выполнить код. Прерывает выполнение в случае возникновения ошибки.
        /// </summary>
        /// <param name="tryCode">Код для выполнения.</param>
        private void TryExecuteSingle(TryExecuteCode tryCode)
        {
            if (tryCode == null)
            {
                throw new ArgumentNullException("tryCode");
            }

            try
            {
                //пытаемся выполнить код.
                tryCode();
            }
            catch (Exception ex)
            {
                ///логируем последюю ошибку.
                this.WriteEventLog(ex);

                //выбрасываем ошибку на верх.
                throw;
            }
        }
Beispiel #2
0
        /// <summary>
        /// Пытается 5 раз выполнить код с задержкой 200мс в случае неудачных попыток.
        /// </summary>
        /// <param name="tryIndex">Индекс попытки. Стартовое значение должно быть равно 0.</param>
        /// <param name="tryCode">Код для выполнения.</param>
        private void TryExecuteInternal(int tryIndex, TryExecuteCode tryCode)
        {
            if (tryCode == null)
            {
                throw new ArgumentNullException("tryCode");
            }

            try
            {
                //пытаемся выполнить код.
                tryCode();
            }
            catch (Exception ex)
            {
                //если количество попыток достигло максимального, выбрасываем исключение наверх.
                if (tryIndex == MaxTryCount - 1)
                {
                    //логируем последюю ошибку.
                    this.WriteEventLog(ex);

                    //выбрасываем ошибку на верх.
                    throw;
                }
                else
                {
                    //логируем первую ошибку.
                    if (tryIndex == 0)
                    {
                        this.WriteEventLog(ex);
                    }

                    //выполняем задержку в 200мс.
                    Thread.Sleep(200);

                    //предпринимаем следующую попытку выполнения кода, увеличивая индекс попытки.
                    this.TryExecuteInternal(tryIndex + 1, tryCode);
                }
            }
        }
Beispiel #3
0
 /// <summary>
 /// Пытается 5 раз выполнить код с задержкой 200мс в случае неудачных попыток.
 /// </summary>
 /// <param name="tryCode">Код для выполнения.</param>
 private void TryExecute(TryExecuteCode tryCode)
 {
     this.TryExecuteInternal(0, tryCode);
 }