protected override Task SerializeToStreamAsync(Stream stream, TransportContext context) { return(Task.Run(() => { PrintLine("Serializing data"); var buffer = new byte[_bufferSize]; var uploaded = 0; while (uploaded < _desiredLength) { var length = _generator.Read(buffer, 0, buffer.Length); if (length <= 0) { break; } uploaded += length; if (uploaded > _desiredLength) { var delta = (int)(uploaded - _desiredLength); uploaded -= delta; length -= delta; } stream.Write(buffer, 0, length); _progressUpdater?.Invoke(uploaded); } PrintLine($"Serialized { _desiredLength } bytes"); })); }
protected override Task SerializeToStreamAsync(Stream stream, TransportContext context) { return(Task.Run(() => { PrintLine("Serializing data"); var buffer = new byte[_bufferSize]; var uploaded = 0L; try { while (uploaded < _desiredLength) { var length = _generator.Read(buffer, 0, buffer.Length); if (length <= 0) { break; } uploaded += length; if (uploaded > _desiredLength) { var delta = (int)(uploaded - _desiredLength); uploaded -= delta; length -= delta; } stream.Write(buffer, 0, length); _progressUpdater?.Invoke(uploaded); } } catch (System.Exception e) { Console.Error.WriteLine($"{e.GetType()} {e.Message}"); Console.Error.WriteLine($"{e.StackTrace}"); throw; } PrintLine($"Serialized { uploaded } bytes of { _desiredLength } requested [{ _fileName }]"); })); }