public object Dequeue() { object item = _queue.DequeueBlocking(); int count = Interlocked.Decrement(ref _itemCount); if ( _underThreshold != null ) { if ( count == _lowerBound ) { _underThreshold.BeginInvoke( count, new AsyncCallback(OnAsyncCallEnd), _underThreshold ); } } return item; }