/// <summary> /// The default method testing if the operation has failed is: /// <code> /// <![CDATA[public Task<bool> DefaultIsFailure(T result, Exception exception, int attempt) => Task.FromResult(exception != null && !exception.IsTransient() && !(exception is RepeatableOperationException));]]> /// </code> /// </summary> /// <param name="result">The result of the operation.</param> /// <param name="exception">The exception that was thrown by the operation (if any).</param> /// <param name="attempt">The number of the current attempt.</param> /// <returns><see langword="true" /> if the operation failed and cannot be retried, <see langword="false" /> otherwise.</returns> public static Task <bool> IsFailureAsync <T>(T result, Exception exception, int attempt) => Task.FromResult(RetryDefaults.IsFailure(result, exception, attempt) && !exception.IsTransient());
/// <summary> /// The method testing if the operation has failed is: /// <code><![CDATA[public bool DefaultIsFailure(T result, Exception exception, int attempt) => exception != null && !exception.IsTransient() && !(exception is RepeatableOperationException);]]></code> /// </summary> /// <param name="result">The result of the operation.</param> /// <param name="exception">The exception that was thrown by the operation (if any).</param> /// <param name="attempt">The number of the current attempt.</param> /// <returns><see langword="true" /> if the operation failed and cannot be retried, <see langword="false" /> otherwise.</returns> public static bool IsFailure <T>(T result, Exception exception, int attempt) => RetryDefaults.IsFailure(result, exception, attempt) && !exception.IsTransient();