Napisałem klasę do synchronizacji żądań, których ma być maksymalnie 240 na minutę. Proszę o sprawdzenie czy klasa jest bezpieczna dla użytku z wieloma wątkami.
sealed class RequestSynchronizer
{
private const int MaxRequestCountPerMin = 240;
private const int MsInMin = 60 * 1000;
private object syncObj = new object();
private int tickCount;
private int requestCount;
private bool IsFreeRequest()
{
lock (syncObj)
{
UpdateRequestCount();
return requestCount < MaxRequestCountPerMin;
}
}
private void UpdateRequestCount()
{
int currentTickCount = Environment.TickCount;
if (currentTickCount - tickCount > MsInMin)
{
requestCount = 0;
tickCount = currentTickCount;
}
}
public void WaitUntliFreeRequest()
{
SpinWait wait = new SpinWait();
while (!IsFreeRequest())
{
wait.SpinOnce();
}
Interlocked.Increment(ref requestCount);
}
}