private void OnPush() { var element = Grab(_buffer.In); _queue.Add(element); if (_queue.Count >= _size) { var deleted = _queue.DeleteMin(); //Console.WriteLine("Deleted {0}", deleted); } if (_downstreamWaiting) { _downstreamWaiting = false; var bufferedElement = GetElement(); Push(_buffer.Out, bufferedElement); } if (!BufferFull) { Pull(_buffer.In); } }