/// <summary> /// Sets the method called when a message handler fails (throws an exception) /// </summary> /// <typeparam name="TMessageType">The message type</typeparam> /// <param name="builder">The retry builder</param> /// <param name="handlerFailedFunc">The method to call when the message handler fails. Return false to cancel further retry attempts.</param> /// <returns>A retry builder</returns> public static IRetryDecoratorBuilder <TMessageType> OnFail <TMessageType>(this IRetryDecoratorBuilder <TMessageType> builder, Func <bool> handlerFailedFunc) { if (handlerFailedFunc == null) { throw new ArgumentNullException(nameof(handlerFailedFunc)); } return(builder.OnFail(attempt => TaskHelper.FromResult(handlerFailedFunc()))); }
/// <summary> /// Sets the method called when a message handler fails (throws an exception) /// </summary> /// <typeparam name="TMessageType">The message type</typeparam> /// <param name="builder">The retry builder</param> /// <param name="handlerFailedFunc">The method to call when the message handler fails</param> /// <returns>A retry builder</returns> public static IRetryDecoratorBuilder <TMessageType> OnFail <TMessageType>(this IRetryDecoratorBuilder <TMessageType> builder, Action handlerFailedFunc) { if (handlerFailedFunc == null) { throw new ArgumentNullException(nameof(handlerFailedFunc)); } return(builder.OnFail( attempt => { handlerFailedFunc(); return TaskHelper.TrueTask; })); }
/// <summary> /// Configures a retry handler /// </summary> /// <typeparam name="TMessageType">The message type</typeparam> /// <param name="builder">The retry builder</param> /// <param name="retryHandler">The retry handler</param> /// <returns>A retry builder</returns> public static IRetryDecoratorBuilder <TMessageType> RetryHandler <TMessageType>( this IRetryDecoratorBuilder <TMessageType> builder, IMessageHandlerRetry <TMessageType> retryHandler) { return(builder.OnFail(retryHandler.HandleRetryAsync).OnSuccess(retryHandler.MessageHandledSuccessfullyAsync)); }