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;
 }