/// <summary>
        /// Returns if an address has exceeded the set rate limit, does NOT increment the rate limit
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        public bool CanRequestNoTrigger(IPAddress address)
        {
            FlushExpired();

            if (!instances.TryGetValue(address, out var instance))
            {
                instance = new LimitedInstance(address);
                if (!instances.TryAdd(address, instance))
                {
                    if (!instances.TryGetValue(address, out instance))
                    {
                        return(false);
                    }
                }
                else
                {
                    expirationQueue.Enqueue(instance);
                }
            }

            lock (instance)
            {
                return(instance.count < rateLimit);
            }
        }
        public void Trigger(IPAddress address)
        {
            if (!instances.TryGetValue(address, out var instance))
            {
                instance = new LimitedInstance(address);
                if (!instances.TryAdd(address, instance))
                {
                    if (!instances.TryGetValue(address, out instance))
                    {
                        return;
                    }
                }
                else
                {
                    expirationQueue.Enqueue(instance);
                }
            }

            lock (instance)
            {
                instance.count++;
            }
        }