WaitAndRetryPolicy
Represents a wait and retry policy class objects with a default back-off time strategy.
using Polly;
using Relativity.DataExchange.Io;
using System;
using System.Threading;
namespace Relativity.DataExchange
{
internal class WaitAndRetryPolicy : IWaitAndRetryPolicy
{
private readonly IAppSettings appSettings;
public WaitAndRetryPolicy()
: this(AppSettings.Instance)
{
}
public WaitAndRetryPolicy(IAppSettings settings)
{
if (settings == null)
throw new ArgumentNullException("settings");
appSettings = settings;
}
public void WaitAndRetry<TException>(Func<int, TimeSpan> retryDuration, Action<Exception, TimeSpan> retryAction, Action<CancellationToken> execFunc, CancellationToken token) where TException : Exception
{
WaitAndRetry<TException>(appSettings.IoErrorNumberOfRetries, retryDuration, retryAction, execFunc, token);
}
public void WaitAndRetry<TException>(int maxRetryCount, Func<int, TimeSpan> retryDuration, Action<Exception, TimeSpan> retryAction, Action<CancellationToken> execFunc, CancellationToken token) where TException : Exception
{
RetrySyntax.WaitAndRetry(Policy.Handle<TException>((Func<TException, bool>)((TException ex) => !(ex is FileInfoInvalidPathException))), maxRetryCount, retryDuration, retryAction).Execute(execFunc, token);
}
public TResult WaitAndRetry<TResult>(Func<Exception, bool> exceptionPredicate, Func<int, TimeSpan> retryDuration, Action<Exception, TimeSpan> retryAction, Func<CancellationToken, TResult> execFunc, CancellationToken token)
{
return RetrySyntax.WaitAndRetry(Policy.Handle<Exception>(exceptionPredicate), appSettings.IoErrorNumberOfRetries, retryDuration, retryAction).Execute<TResult>(execFunc, token);
}
public TResult WaitAndRetry<TResult, TException>(Func<int, TimeSpan> retryDuration, Action<Exception, TimeSpan> retryAction, Func<CancellationToken, TResult> execFunc, CancellationToken token) where TException : Exception
{
return RetrySyntax.WaitAndRetry(Policy.Handle<TException>(), appSettings.IoErrorNumberOfRetries, retryDuration, retryAction).Execute<TResult>(execFunc, token);
}
public TResult WaitAndRetry<TResult, TException>(int maxRetryCount, Func<int, TimeSpan> retryDuration, Action<Exception, TimeSpan> retryAction, Func<CancellationToken, TResult> execFunc, CancellationToken token) where TException : Exception
{
return RetrySyntax.WaitAndRetry(Policy.Handle<TException>(), maxRetryCount, retryDuration, retryAction).Execute<TResult>(execFunc, token);
}
}
}