< Summary

Information
Class: Intentum.Runtime.Resilience.Retry.MemoryRetryPolicy
Assembly: Intentum.Runtime
File(s): /home/runner/work/Intentum/Intentum/src/Intentum.Runtime/Resilience/Retry/MemoryRetryPolicy.cs
Line coverage
89%
Covered lines: 26
Uncovered lines: 3
Coverable lines: 29
Total lines: 42
Line coverage: 89.6%
Branch coverage
25%
Covered branches: 1
Total branches: 4
Branch coverage: 25%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)100%11100%
ExecuteAsync()100%11100%
CalculateDelay(...)25%4470%

File(s)

/home/runner/work/Intentum/Intentum/src/Intentum.Runtime/Resilience/Retry/MemoryRetryPolicy.cs

#LineLine coverage
 1namespace Intentum.Runtime.Resilience.Retry;
 2
 3public sealed class MemoryRetryPolicy : IRetryPolicy
 4{
 5    private readonly RetryOptions _options;
 6
 67    public MemoryRetryPolicy(RetryOptions options)
 68    {
 69        _options = options;
 610    }
 11
 12    public async Task<T> ExecuteAsync<T>(Func<CancellationToken, Task<T>> operation, CancellationToken cancellationToken
 613    {
 614        var attempts = 0;
 1315        while (true)
 1316        {
 1317            cancellationToken.ThrowIfCancellationRequested();
 18            try
 1319            {
 1320                attempts++;
 1321                return await operation(cancellationToken);
 22            }
 1123            catch (Exception) when (attempts <= _options.MaxRetries)
 824            {
 825                var delay = CalculateDelay(attempts);
 826                await Task.Delay(delay, cancellationToken);
 727            }
 728        }
 229    }
 30
 31    private TimeSpan CalculateDelay(int attempt)
 832    {
 833        return _options.Backoff switch
 834        {
 035            RetryBackoffType.Constant => _options.BaseDelay,
 036            RetryBackoffType.Linear => _options.BaseDelay * attempt,
 837            RetryBackoffType.Exponential => TimeSpan.FromMilliseconds(
 838                _options.BaseDelay.TotalMilliseconds * Math.Pow(2, attempt - 1)),
 039            _ => _options.BaseDelay
 840        };
 841    }
 42}