When calling ReadToEndAsync a StreamReader for the ShellStream in the ShellStreamOnDataReceived event, the request hangs and never returns. it is due to this block in the read method: while (_readBuffer.ActiveLength == 0 && !_disposed) { _ = Monitor.Wait(_sync); } the method never returns 0 so ReadToEnd never completes.