Skip to content

Commit

Permalink
Clean up pipes usage in TestHost
Browse files Browse the repository at this point in the history
  • Loading branch information
Tratcher committed Apr 20, 2018
1 parent 78904e7 commit d69798d
Showing 1 changed file with 12 additions and 26 deletions.
38 changes: 12 additions & 26 deletions src/Microsoft.AspNetCore.TestHost/ResponseStream.cs
Original file line number Diff line number Diff line change
Expand Up @@ -109,34 +109,20 @@ public async override Task<int> ReadAsync(byte[] buffer, int offset, int count,
var registration = cancellationToken.Register(Cancel);
try
{
// TODO: Usability issue. dotnet/corefx#27732 Flush or zero byte write causes ReadAsync to complete without data so I have to call ReadAsync in a loop.
while (true)
var result = await _pipe.Reader.ReadAsync(cancellationToken);

if (result.Buffer.IsEmpty && result.IsCompleted)
{
var result = await _pipe.Reader.ReadAsync(cancellationToken);

var readableBuffer = result.Buffer;
if (!readableBuffer.IsEmpty)
{
var actual = Math.Min(readableBuffer.Length, count);
readableBuffer = readableBuffer.Slice(0, actual);
readableBuffer.CopyTo(new Span<byte>(buffer, offset, count));
_pipe.Reader.AdvanceTo(readableBuffer.End, readableBuffer.End);
return (int)actual;
}

if (result.IsCompleted)
{
_pipe.Reader.AdvanceTo(readableBuffer.End, readableBuffer.End); // TODO: Remove after https://github.com/dotnet/corefx/pull/27596
_pipe.Reader.Complete();
return 0;
}

cancellationToken.ThrowIfCancellationRequested();
Debug.Assert(!result.IsCanceled); // It should only be canceled by cancellationToken.

// Try again. TODO: dotnet/corefx#27732 I shouldn't need to do this, there wasn't any data.
_pipe.Reader.AdvanceTo(readableBuffer.End, readableBuffer.End);
_pipe.Reader.Complete();
return 0;
}

var readableBuffer = result.Buffer;
var actual = Math.Min(readableBuffer.Length, count);
readableBuffer = readableBuffer.Slice(0, actual);
readableBuffer.CopyTo(new Span<byte>(buffer, offset, count));
_pipe.Reader.AdvanceTo(readableBuffer.End, readableBuffer.End);
return (int)actual;
}
finally
{
Expand Down

0 comments on commit d69798d

Please sign in to comment.