/// <summary> /// Used to log attempts /// </summary> private static void OnRetryingEvent(object sender, SqlRetryingEventArgs args) { var lastException = args.Exceptions[args.Exceptions.Count - 1]; var msg = string.Format("<sc.{0}.OnRetryingEvent|INFO>: Default configurable retry logic for {1} object. attempts count:{2}, upcoming delay:{3}", TypeName, sender.GetType().Name, args.RetryCount, args.Delay); SqlClientEventSource.Log.TryTraceEvent("{0}, Last exception:<{1}>", msg, lastException.Message); SqlClientEventSource.Log.TryAdvancedTraceEvent("<ADV>{0}, Last exception: {1}", msg, lastException); }
private void ApplyRetryingEvent(object sender, SqlRetryLogicBase retryLogic, TimeSpan intervalTime, List <Exception> exceptions, Exception lastException) { string methodName = MethodBase.GetCurrentMethod().Name; if (Retrying != null) { var retryEventArgs = new SqlRetryingEventArgs(retryLogic.Current, intervalTime, exceptions); SqlClientEventSource.Log.TryTraceEvent("<sc.{0}.{1}|INFO> Running the retrying event.", TypeName, methodName); Retrying?.Invoke(sender, retryEventArgs); if (retryEventArgs.Cancel) { SqlClientEventSource.Log.TryTraceEvent("<sc.{0}.{1}|INFO> Retry attempt cancelled (current retry number = {2}).", TypeName, methodName, retryLogic.Current); throw CreateException(exceptions, retryLogic, true); } } SqlClientEventSource.Log.TryTraceEvent("<sc.{0}.{1}|INFO> Wait '{2}' and run the action for retry number {3}.", TypeName, methodName, intervalTime, retryLogic.Current); }