Ejemplo n.º 1
0
        public T CheckOut()
        {
            long now = DateTime.Now.Ticks;
            T    obj = null;

            if (Unlocked.Count > 0)
            {
                foreach (var keyval in Unlocked)
                {
                    obj = keyval.Key;
                    if (now - keyval.Value > ExpirationTime)
                    {
                        Unlocked.Remove(obj);
                        Expire(obj);
                        obj = null;
                    }
                    else
                    {
                        if (Validate(obj))
                        {
                            Unlocked.Remove(obj);
                            Locked.Add(obj, now);
                            return(obj);
                        }
                        else
                        {
                            Unlocked.Remove(obj);
                            Expire(obj);
                            obj = null;
                        }
                    }
                }
            }
            obj = Create();
            Locked.Add(obj, now);
            return(obj);
        }