PagedBufferedTextWriter does not flush synchronous data prior to writing data asynchronously
Fixes #5241
This commit is contained in:
parent
43071319aa
commit
d9ff1d81d6
|
|
@ -86,19 +86,22 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
|
|||
_charBuffer.Append(value);
|
||||
}
|
||||
|
||||
public override Task WriteAsync(char value)
|
||||
public override async Task WriteAsync(char value)
|
||||
{
|
||||
return _inner.WriteAsync(value);
|
||||
await FlushAsync();
|
||||
await _inner.WriteAsync(value);
|
||||
}
|
||||
|
||||
public override Task WriteAsync(char[] buffer, int index, int count)
|
||||
public override async Task WriteAsync(char[] buffer, int index, int count)
|
||||
{
|
||||
return _inner.WriteAsync(buffer, index, count);
|
||||
await FlushAsync();
|
||||
await _inner.WriteAsync(buffer, index, count);
|
||||
}
|
||||
|
||||
public override Task WriteAsync(string value)
|
||||
public override async Task WriteAsync(string value)
|
||||
{
|
||||
return _inner.WriteAsync(value);
|
||||
await FlushAsync();
|
||||
await _inner.WriteAsync(value);
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
|
|
|
|||
|
|
@ -187,6 +187,63 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
|
|||
Assert.Equal<char>(Content, inner.ToString().ToCharArray());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SynchronousWrites_FollowedByAsyncWriteString_WritesAllContent()
|
||||
{
|
||||
// Arrange
|
||||
var pool = new TestArrayPool();
|
||||
var inner = new StringWriter();
|
||||
|
||||
var writer = new PagedBufferedTextWriter(new TestArrayPool(), inner);
|
||||
|
||||
// Act
|
||||
writer.Write('a');
|
||||
writer.Write(new[] { 'b', 'c', 'd' });
|
||||
writer.Write("ef");
|
||||
await writer.WriteAsync("ghi");
|
||||
|
||||
// Assert
|
||||
Assert.Equal("abcdefghi", inner.ToString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SynchronousWrites_FollowedByAsyncWriteChar_WritesAllContent()
|
||||
{
|
||||
// Arrange
|
||||
var pool = new TestArrayPool();
|
||||
var inner = new StringWriter();
|
||||
|
||||
var writer = new PagedBufferedTextWriter(new TestArrayPool(), inner);
|
||||
|
||||
// Act
|
||||
writer.Write('a');
|
||||
writer.Write(new[] { 'b', 'c', 'd' });
|
||||
writer.Write("ef");
|
||||
await writer.WriteAsync('g');
|
||||
|
||||
// Assert
|
||||
Assert.Equal("abcdefg", inner.ToString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SynchronousWrites_FollowedByAsyncWriteCharArray_WritesAllContent()
|
||||
{
|
||||
// Arrange
|
||||
var pool = new TestArrayPool();
|
||||
var inner = new StringWriter();
|
||||
|
||||
var writer = new PagedBufferedTextWriter(new TestArrayPool(), inner);
|
||||
|
||||
// Act
|
||||
writer.Write('a');
|
||||
writer.Write(new[] { 'b', 'c', 'd' });
|
||||
writer.Write("ef");
|
||||
await writer.WriteAsync(new[] { 'g', 'h', 'i' });
|
||||
|
||||
// Assert
|
||||
Assert.Equal("abcdefghi", inner.ToString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task FlushAsync_ReturnsPages()
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue