public static async Task ThrottleRequests()
{
_cancelationTokenSource.Token.ThrowIfCancellationRequested();
var offset = DateTime.Now - _lastRequestMade;
if (offset.TotalMilliseconds < 1000)
{
await Task.Delay(1000 - (int)offset.TotalMilliseconds);
}
if (_requestSetCount > 15)
{
var overallOffset = DateTime.Now - _priorRequestSet;
if (overallOffset.TotalSeconds < 30)
{
var delay = (30 - (int)overallOffset.TotalSeconds) * 1000;
if (delay > 2)
{
for (int i = 0; i < delay; i++)
{
_cancelationTokenSource.Token.ThrowIfCancellationRequested();
await Task.Delay(1000);
}
}
else
await Task.Delay(delay);
}
_requestSetCount = 0;
_priorRequestSet = DateTime.Now;
}
_requestSetCount++;
_lastRequestMade = DateTime.Now;
}