How to avoid deadlocks when reading redirected child console in C# (part 2)

Some time ago, I showed a way to avoid deadlocks when reading the redirected console of a child process in a synchronous way. It works, but only when we have to deal with a single output stream – standard output or standard error stream. But what should be done when both streams are flooded with data?