PipeWriter.OnReaderCompleted is basically impossible to implement on anything but the default Pipe implementation. When there's no reader on the other side consuming the data (like the StreamPipeReader), this method can't do anything but noop. It should have been put on the concrete implementation but not on the abstract class.