withSIX.Core.Infra.Services.ReactiveProcess.ReadStreamToEnd C# (CSharp) Метод

ReadStreamToEnd() статический приватный Метод

static private ReadStreamToEnd ( StreamReader stream, IObserver observable ) : System.Threading.Tasks.Task
stream System.IO.StreamReader
observable IObserver
Результат System.Threading.Tasks.Task
        static async Task ReadStreamToEnd(StreamReader stream, IObserver<string> observable) {
            try {
                var readBuffer = new char[1];
                var lineBuffer = new StringBuilder();
                while (await stream.ReadAsync(readBuffer, 0, 1).ConfigureAwait(false) > 0) {
                    var c = readBuffer[0];
                    lineBuffer.Append(c);
                    // This does not account for unterminated lines.... like 'verifying download...'
                    // We would be able to do this by sending the data also byte by byte to the receivers, but for little gain.
                    if ((c != '\r') && (c != '\n'))
                        continue;
                    observable.OnNext(lineBuffer.ToString());
                    lineBuffer.Clear();
                }

                if (lineBuffer.Length > 0)
                    observable.OnNext(lineBuffer.ToString());
                observable.OnCompleted();
            } catch (Exception ex) {
                observable.OnError(ex);
                throw;
            }
        }
    }