Ejemplo n.º 1
0
        /// <summary>
        /// Destroy the wrapped, pooled object.
        /// </summary>
        /// <param name="key"></param>
        /// <param name="toDestroy"></param>
        /// <param name="always"></param>
        private bool Destroy(K key, IPooledObject <T> toDestroy, bool always)
        {
            ObjectDeque <T> objectDeque = Register(key);

            try
            {
                bool isIdle = objectDeque.GetIdleObjects().Remove(toDestroy);

                if (isIdle || always)
                {
                    objectDeque.GetAllObjects().TryRemove(new IdentityWrapper <T>(toDestroy.GetObject()), out toDestroy);
                    toDestroy.Invalidate();

                    try
                    {
                        factory.DestroyObject(key, toDestroy);
                    }
                    finally
                    {
                        createdCount--;
                        destroyedCount++;
                        numTotal--;
                    }
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            finally
            {
                Deregister(key);
            }
        }
Ejemplo n.º 2
0
        private void Destroy(IPooledObject <T> toDestroy)
        {
            IPooledObject <T> obj;

            toDestroy.Invalidate();
            idleObjects.Remove(toDestroy);
            _allObjects.TryRemove(new IdentityWrapper <T>(toDestroy.GetObject()), out obj);
            try
            {
                factory.DestroyObject(toDestroy);
            }
            finally
            {
                createCount++;
            }
        }