public object BorrowObject() { lock (sync) { if (closed) { throw new InvalidOperationException("The pool is closed."); } object useable = null; IEnumerator <object> objects = passiveObjects.GetEnumerator(); List <object> destroyedObjects = new List <object>(); while (objects.MoveNext() && useable == null) { PoolableObjectFactory.ActivateObject(objects.Current); if (PoolableObjectFactory.ValidateObject(objects.Current)) { useable = objects.Current; } else { PoolableObjectFactory.DestroyObject(objects.Current); destroyedObjects.Add(objects.Current); } } passiveObjects.RemoveAll(o => destroyedObjects.Contains(o)); if (useable == null) { useable = PoolableObjectFactory.MakeObject(); PoolableObjectFactory.ActivateObject(useable); } activeObjects.Add(useable); return(useable); } }
public void AddObject() { lock (sync) { passiveObjects.Add(PoolableObjectFactory.MakeObject()); } }