public void Dispose() { lock (SyncObject) { if (_disposed) { return; } _disposed = true; CreditWaiter waiter = _waitersTail; if (waiter != null) { do { CreditWaiter next = waiter.Next; waiter.Next = null; waiter.Dispose(); waiter = next; }while (waiter != _waitersTail); _waitersTail = null; } } }