예제 #1
0
 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);
 }
예제 #2
0
 internal void Return(CheckoutObject <T> checkoutRecord)
 {
     CheckedOut.TryRemove(checkoutRecord, out _);
     _ClearAction(checkoutRecord.CheckedOutObject);
     Available.Enqueue(checkoutRecord);
 }