<PackageReference Include="Relativity.Server.Import.SDK" Version="2.9.2" />

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); } } }