Skip to content

Commit 86827c3

Browse files
committed
Consolidate duplicated code to calculate rate limiter delay.
1 parent d1f72d0 commit 86827c3

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

projects/RabbitMQ.Client/ThrottlingRateLimiter.cs

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ public ThrottlingRateLimiter(int maxConcurrentCalls, int? throttlingPercentage =
5858
_concurrencyLimiter = new ConcurrencyLimiter(limiterOptions);
5959
}
6060

61+
public override TimeSpan? IdleDuration => null;
62+
6163
public override RateLimiterStatistics? GetStatistics() => _concurrencyLimiter.GetStatistics();
6264

6365
protected override RateLimitLease AttemptAcquireCore(int permitCount)
@@ -80,26 +82,24 @@ protected override async ValueTask<RateLimitLease> AcquireAsyncCore(int permitCo
8082

8183
private void ThrottleIfNeeded()
8284
{
83-
long? availablePermits = _concurrencyLimiter.GetStatistics()?.CurrentAvailablePermits;
84-
if (!(availablePermits < _throttlingThreshold))
85+
int delay = CalculateDelay();
86+
if (delay > 0)
8587
{
86-
return;
88+
Thread.Sleep(delay);
8789
}
88-
89-
int delay = (int)((1.0 - availablePermits / (double)_maxConcurrency) * 1000);
90-
Thread.Sleep(delay);
9190
}
9291

9392
private Task ThrottleIfNeededAsync(CancellationToken cancellationToken = default)
9493
{
95-
long? availablePermits = _concurrencyLimiter.GetStatistics()?.CurrentAvailablePermits;
96-
if (!(availablePermits < _throttlingThreshold))
94+
int delay = CalculateDelay();
95+
if (delay > 0)
96+
{
97+
return Task.Delay(delay, cancellationToken);
98+
}
99+
else
97100
{
98101
return Task.CompletedTask;
99102
}
100-
101-
int delay = (int)((1.0 - availablePermits / (double)_maxConcurrency) * 1000);
102-
return Task.Delay(delay, cancellationToken);
103103
}
104104

105105
protected override void Dispose(bool disposing)
@@ -112,6 +112,15 @@ protected override void Dispose(bool disposing)
112112
base.Dispose(disposing);
113113
}
114114

115-
public override TimeSpan? IdleDuration => null;
115+
private int CalculateDelay()
116+
{
117+
long? availablePermits = _concurrencyLimiter.GetStatistics()?.CurrentAvailablePermits;
118+
if (!(availablePermits < _throttlingThreshold))
119+
{
120+
return 0;
121+
}
122+
123+
return (int)((1.0 - availablePermits / (double)_maxConcurrency) * 1000);
124+
}
116125
}
117126
}

0 commit comments

Comments
 (0)