using System; using System.Threading; using System.Threading.Tasks; using RateGateAsync; using Sony.Filtr.Contracts.Abstractions; namespace Sony.Filtr.SpotifyWebAPI { public class SpotifyRateLimiter : IRateLimiter { private readonly RateGate _RateLimiter; public SpotifyRateLimiter(RateGate rateLimiter) { this._RateLimiter = rateLimiter;// new RateGate(occurencesLimit, TimeSpan.FromSeconds(1)); } public async Task WaitToProceedAsync() { var timeout = TimeSpan.FromMinutes(10); var proceed = await _RateLimiter.WaitToProceedAsync(timeout); if (!proceed) { throw new Exception("Timout waiting for rate limit."); } } public async Task WaitToProceedAsync(TimeSpan timeSpan, CancellationToken cancellationToken) { var proceed = await _RateLimiter.WaitToProceedAsync(timeSpan, cancellationToken); if (!proceed) { throw new Exception("Timout waiting for rate limit."); } } } }