11using System ;
22using System . Diagnostics ;
33using System . Threading ;
4- using System . Threading . Tasks ;
54using Microsoft . Extensions . Logging ;
65using Shoko . Plugin . Abstractions ;
76using Shoko . Plugin . Abstractions . Events ;
@@ -15,8 +14,7 @@ namespace Shoko.Server.Providers.AniDB;
1514public abstract class AniDBRateLimiter
1615{
1716 private readonly ILogger _logger ;
18-
19- private readonly SemaphoreSlim _lock = new ( 1 , 1 ) ;
17+ private readonly object _lock = new ( ) ;
2018
2119 private readonly object _settingsLock = new ( ) ;
2220
@@ -140,9 +138,9 @@ private void ResetRate()
140138 _logger . LogTrace ( "Rate is reset. Active time was {Time} ms" , elapsedTime ) ;
141139 }
142140
143- public async Task < T > EnsureRateAsync < T > ( Func < Task < T > > action , bool forceShortDelay = false )
141+ public T EnsureRate < T > ( Func < T > action , bool forceShortDelay = false )
144142 {
145- await _lock . WaitAsync ( ) ;
143+ lock ( _lock )
146144 try
147145 {
148146 var delay = _requestWatch . ElapsedMilliseconds ;
@@ -153,22 +151,21 @@ public async Task<T> EnsureRateAsync<T>(Func<Task<T>> action, bool forceShortDel
153151 {
154152 _logger . LogTrace ( "Time since last request is {Delay} ms, not throttling" , delay ) ;
155153 _logger . LogTrace ( "Sending AniDB command" ) ;
156- return await action ( ) ;
154+ return action ( ) ;
157155 }
158156
159157 // add 50ms for good measure
160158 var waitTime = currentDelay - ( int ) delay + 50 ;
161159
162- _logger . LogTrace ( "Time since last request is {Delay} ms, throttling for {Time}" , delay , waitTime ) ;
163- await Task . Delay ( waitTime ) ;
160+ _logger . LogTrace ( "Time since last request is {Delay} ms, throttling for {Time}ms " , delay , waitTime ) ;
161+ Thread . Sleep ( waitTime ) ;
164162
165163 _logger . LogTrace ( "Sending AniDB command" ) ;
166- return await action ( ) ;
164+ return action ( ) ;
167165 }
168166 finally
169167 {
170168 _requestWatch . Restart ( ) ;
171- _lock . Release ( ) ;
172169 }
173170 }
174171}
0 commit comments