Write async chunks async
This commit is contained in:
parent
9885377148
commit
d3d9c8d546
|
|
@ -421,7 +421,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
WriteChunked(data);
|
WriteChunkedAsync(data, RequestAborted).GetAwaiter().GetResult();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -468,19 +468,14 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void WriteChunked(ArraySegment<byte> data)
|
private Task WriteChunkedAsync(ArraySegment<byte> data, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
SocketOutput.Write(data, immediate: false, chunk: true);
|
return SocketOutput.WriteAsync(data, immediate: false, chunk: true, cancellationToken: cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task WriteChunkedAsync(ArraySegment<byte> data, CancellationToken cancellationToken)
|
private Task WriteChunkedResponseSuffix()
|
||||||
{
|
{
|
||||||
await SocketOutput.WriteAsync(data, immediate: false, chunk: true, cancellationToken: cancellationToken);
|
return SocketOutput.WriteAsync(_endChunkedResponseBytes, immediate: true);
|
||||||
}
|
|
||||||
|
|
||||||
private void WriteChunkedResponseSuffix()
|
|
||||||
{
|
|
||||||
SocketOutput.Write(_endChunkedResponseBytes, immediate: true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ArraySegment<byte> CreateAsciiByteArraySegment(string text)
|
private static ArraySegment<byte> CreateAsciiByteArraySegment(string text)
|
||||||
|
|
@ -571,31 +566,41 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
return ProduceEndAwaited();
|
return ProduceEndAwaited();
|
||||||
}
|
}
|
||||||
|
|
||||||
WriteSuffix();
|
return WriteSuffix();
|
||||||
|
|
||||||
return TaskUtilities.CompletedTask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task ProduceEndAwaited()
|
private async Task ProduceEndAwaited()
|
||||||
{
|
{
|
||||||
await ProduceStart(immediate: true, appCompleted: true);
|
await ProduceStart(immediate: true, appCompleted: true);
|
||||||
|
|
||||||
WriteSuffix();
|
await WriteSuffix();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void WriteSuffix()
|
private Task WriteSuffix()
|
||||||
{
|
{
|
||||||
// _autoChunk should be checked after we are sure ProduceStart() has been called
|
// _autoChunk should be checked after we are sure ProduceStart() has been called
|
||||||
// since ProduceStart() may set _autoChunk to true.
|
// since ProduceStart() may set _autoChunk to true.
|
||||||
if (_autoChunk)
|
if (_autoChunk)
|
||||||
{
|
{
|
||||||
WriteChunkedResponseSuffix();
|
return WriteAutoChunkSuffixAwaited();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_keepAlive)
|
if (_keepAlive)
|
||||||
{
|
{
|
||||||
ConnectionControl.End(ProduceEndType.ConnectionKeepAlive);
|
ConnectionControl.End(ProduceEndType.ConnectionKeepAlive);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return TaskUtilities.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task WriteAutoChunkSuffixAwaited()
|
||||||
|
{
|
||||||
|
await WriteChunkedResponseSuffix();
|
||||||
|
|
||||||
|
if (_keepAlive)
|
||||||
|
{
|
||||||
|
ConnectionControl.End(ProduceEndType.ConnectionKeepAlive);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task CreateResponseHeader(
|
private Task CreateResponseHeader(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue