using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Web; using NLog; using Sony.Filtr.Contracts.Abstractions; namespace Sony.Filtr.Utility { public class RateLimitedHttpMessageHandler : DelegatingHandler { private readonly IRateLimiter _rateLimiter; public RateLimitedHttpMessageHandler(HttpMessageHandler innerHandler, IRateLimiter rateLimiter) : base(innerHandler) { _rateLimiter = rateLimiter; } protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { await _rateLimiter.WaitToProceedAsync(); return await base.SendAsync(request, cancellationToken); } } }