m.Utils.LeakyBucket.Leak C# (CSharp) Méthode

Leak() public méthode

public Leak ( ) : void
Résultat void
        public void Leak()
        {
            lock (leakLock)
            {
                var current = currentSize;
                if (current == 0)
                {
                    lastLeakOn = DateTime.UtcNow;
                    return;
                }
                else
                {
                    var elapsed = (DateTime.UtcNow - lastLeakOn).TotalMilliseconds;
                    var leak = (elapsed / 1000) * LeakRate;
                    if (leak >= 1)
                    {
                        while (Interlocked.CompareExchange(ref currentSize, Math.Max(0, current - (int)leak), current) != current)
                        {
                            current = currentSize;
                            elapsed = (DateTime.UtcNow - lastLeakOn).TotalMilliseconds;
                            leak = (elapsed / 1000) * LeakRate;
                        }

                        lastLeakOn = DateTime.UtcNow;
                    }
                }
            }
        }