Dreamine.Communication.Core 1.0.2
Dreamine.Communication.Core 통신 기능과 관련 API를 제공합니다.
로딩중...
검색중...
일치하는것 없음
ReconnectDelayCalculator.cs
이 파일의 문서화 페이지로 가기
1using Dreamine.Communication.Abstractions.Options;
2
4
13public sealed class ReconnectDelayCalculator
14{
23 private readonly ReconnectPolicy _policy;
24
41 public ReconnectDelayCalculator(ReconnectPolicy? policy = null)
42 {
43 _policy = policy ?? new ReconnectPolicy();
44 }
45
70 public TimeSpan Calculate(int attemptCount)
71 {
72 if (attemptCount <= 1)
73 {
74 return NormalizeDelay(_policy.InitialDelay);
75 }
76
77 var initialMilliseconds = Math.Max(1, _policy.InitialDelay.TotalMilliseconds);
78 var factor = Math.Max(1, _policy.BackoffFactor);
79 var calculatedMilliseconds = initialMilliseconds * Math.Pow(factor, attemptCount - 1);
80 var maxMilliseconds = Math.Max(
81 initialMilliseconds,
82 _policy.MaxDelay.TotalMilliseconds);
83
84 var finalMilliseconds = Math.Min(calculatedMilliseconds, maxMilliseconds);
85
86 return TimeSpan.FromMilliseconds(finalMilliseconds);
87 }
88
113 private static TimeSpan NormalizeDelay(TimeSpan delay)
114 {
115 if (delay <= TimeSpan.Zero)
116 {
117 return TimeSpan.FromMilliseconds(1);
118 }
119
120 return delay;
121 }
122}