Remove unnecessary Flush (#7424)

This commit is contained in:
Ben Adams 2019-02-11 19:02:00 +00:00 committed by Justin Kotalik
parent 6d42ff7c38
commit 3276870d6a
1 changed files with 11 additions and 26 deletions

View File

@ -750,7 +750,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
private Task FireOnCompletedMayAwait(Stack<KeyValuePair<Func<object, Task>, object>> onCompleted) private Task FireOnCompletedMayAwait(Stack<KeyValuePair<Func<object, Task>, object>> onCompleted)
{ {
while (onCompleted.TryPop(out var entry)) while (onCompleted.TryPop(out var entry))
{ {
try try
@ -792,27 +791,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
Log.ApplicationError(ConnectionId, TraceIdentifier, ex); Log.ApplicationError(ConnectionId, TraceIdentifier, ex);
} }
} }
} }
[MethodImpl(MethodImplOptions.NoInlining)] [MethodImpl(MethodImplOptions.NoInlining)]
private async Task InitializeAndFlushAsyncAwaited(Task initializeTask, CancellationToken cancellationToken) private Task FlushAsyncInternal()
{ {
await initializeTask; return Output.FlushAsync(default).AsTask();
await FlushAsyncInternal(cancellationToken);
}
[MethodImpl(MethodImplOptions.NoInlining)]
private ValueTask<FlushResult> FlushAsyncInternal(CancellationToken cancellationToken)
{
_requestProcessingStatus = RequestProcessingStatus.HeadersFlushed;
return Output.FlushAsync(cancellationToken);
}
private Task WriteDataAsync(ReadOnlyMemory<byte> data, CancellationToken cancellationToken)
{
_requestProcessingStatus = RequestProcessingStatus.HeadersFlushed;
return Output.WriteDataAsync(data.Span, cancellationToken: cancellationToken);
} }
private void VerifyAndUpdateWrite(int count) private void VerifyAndUpdateWrite(int count)
@ -1011,7 +995,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
if (!HasFlushedHeaders) if (!HasFlushedHeaders)
{ {
return FlushAsyncInternal(default).AsTask(); _requestProcessingStatus = RequestProcessingStatus.HeadersFlushed;
return FlushAsyncInternal();
} }
return Task.CompletedTask; return Task.CompletedTask;
@ -1350,6 +1335,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
if (firstWrite) if (firstWrite)
{ {
var initializeTask = InitializeResponseAsync(data.Length); var initializeTask = InitializeResponseAsync(data.Length);
// Just about to Flush the headers
_requestProcessingStatus = RequestProcessingStatus.HeadersFlushed;
// If return is Task.CompletedTask no awaiting is required // If return is Task.CompletedTask no awaiting is required
if (!ReferenceEquals(initializeTask, Task.CompletedTask)) if (!ReferenceEquals(initializeTask, Task.CompletedTask))
{ {
@ -1367,10 +1354,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
{ {
if (data.Length == 0) if (data.Length == 0)
{ {
return !firstWrite ? default : FlushAsyncInternal(cancellationToken); return !firstWrite ? default : Output.FlushAsync(cancellationToken);
} }
_requestProcessingStatus = RequestProcessingStatus.HeadersFlushed;
return Output.WriteChunkAsync(data.Span, cancellationToken); return Output.WriteChunkAsync(data.Span, cancellationToken);
} }
else else
@ -1382,11 +1368,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
else else
{ {
HandleNonBodyResponseWrite(); HandleNonBodyResponseWrite();
return !firstWrite ? default : FlushAsyncInternal(cancellationToken); return !firstWrite ? default : Output.FlushAsync(cancellationToken);
} }
} }
public Task FlushAsync(CancellationToken cancellationToken = default(CancellationToken)) public Task FlushAsync(CancellationToken cancellationToken = default)
{ {
return FlushPipeAsync(cancellationToken).AsTask(); return FlushPipeAsync(cancellationToken).AsTask();
} }
@ -1415,10 +1401,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
{ {
if (data.Length == 0) if (data.Length == 0)
{ {
return await FlushAsyncInternal(cancellationToken); return await Output.FlushAsync(cancellationToken);
} }
_requestProcessingStatus = RequestProcessingStatus.HeadersFlushed;
return await Output.WriteChunkAsync(data.Span, cancellationToken); return await Output.WriteChunkAsync(data.Span, cancellationToken);
} }
else else
@ -1430,7 +1415,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
else else
{ {
HandleNonBodyResponseWrite(); HandleNonBodyResponseWrite();
return await FlushAsyncInternal(cancellationToken); return await Output.FlushAsync(cancellationToken);
} }
} }
} }