internal CheckoutObject <T> Checkout() { if (Available.Count > 0 && Available.TryDequeue(out CheckoutObject <T> checkoutRecord) == false) { CheckedOut.TryAdd(checkoutRecord, 0); return(checkoutRecord); } checkoutRecord = new CheckoutObject <T>(_CreationFunction()); checkoutRecord.Disposing += CheckedOutItem_Disposing; CheckedOut.TryAdd(checkoutRecord, 0); return(checkoutRecord); }
internal void Return(CheckoutObject <T> checkoutRecord) { CheckedOut.TryRemove(checkoutRecord, out _); _ClearAction(checkoutRecord.CheckedOutObject); Available.Enqueue(checkoutRecord); }