public Pool(int capacity, Action <T> recycler)
 {
     if (recycler == null)
     {
         throw new ArgumentNullException("recycler");
     }
     _id       = PoolHelper.GetId();
     _entries  = new FixedSizeQueue <T>(capacity);
     _recycler = recycler;
 }
 internal void Donate(T entry)
 {
     if (!ReferenceEquals(entry, null) && !AppDomain.CurrentDomain.IsFinalizingForUnload() && PoolHelper.Enter(_id))
     {
         try
         {
             _recycler(entry);
             _entries.Add(entry);
         }
         finally
         {
             PoolHelper.Leave(_id);
         }
     }
 }
 public Pool(int capacity)
 {
     _id       = PoolHelper.GetId();
     _entries  = new FixedSizeQueue <T>(capacity);
     _recycler = GC.KeepAlive;
 }