<PackageReference Include="Polly" Version="7.2.2" />

SingleHealthMetrics

using Polly.Utilities; using System; namespace Polly.CircuitBreaker { internal class SingleHealthMetrics : IHealthMetrics { private readonly long _samplingDuration; private HealthCount _current; public SingleHealthMetrics(TimeSpan samplingDuration) { _samplingDuration = samplingDuration.Ticks; } public void IncrementSuccess_NeedsLock() { ActualiseCurrentMetric_NeedsLock(); _current.Successes++; } public void IncrementFailure_NeedsLock() { ActualiseCurrentMetric_NeedsLock(); _current.Failures++; } public void Reset_NeedsLock() { _current = null; } public HealthCount GetHealthCount_NeedsLock() { ActualiseCurrentMetric_NeedsLock(); return _current; } private void ActualiseCurrentMetric_NeedsLock() { long ticks = SystemClock.UtcNow().Ticks; if (_current == null || ticks - _current.StartedAt >= _samplingDuration) _current = new HealthCount { StartedAt = ticks }; } } }