/// <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); } }
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++; } }