public bool Request(DateTime timeStamp)
{
lock(_lockObject)
{
if (_maxEventsPerSecond == 0)
return true;
var timePassed = timeStamp - _timeBefore;
_timeBefore = timeStamp;
_tokens += 1.0 * _maxEventsPerSecond * timePassed.Ticks / TimeSpan.FromSeconds(1).Ticks;
if (_tokens > _maxEventsPerSecond)
_tokens = _maxEventsPerSecond;
if (_tokens >= 1)
{
_tokens--;
return true;
}
return false;
}
}