From 3276870d6ac25b6a215815f43f6e19c176de38bc Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Mon, 11 Feb 2019 19:02:00 +0000 Subject: [PATCH] Remove unnecessary Flush (#7424) --- .../Core/src/Internal/Http/HttpProtocol.cs | 37 ++++++------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/src/Servers/Kestrel/Core/src/Internal/Http/HttpProtocol.cs b/src/Servers/Kestrel/Core/src/Internal/Http/HttpProtocol.cs index 5e873f1458..78e5e60f4d 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http/HttpProtocol.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http/HttpProtocol.cs @@ -750,7 +750,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http private Task FireOnCompletedMayAwait(Stack, object>> onCompleted) { - while (onCompleted.TryPop(out var entry)) { try @@ -792,27 +791,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http Log.ApplicationError(ConnectionId, TraceIdentifier, ex); } } - } [MethodImpl(MethodImplOptions.NoInlining)] - private async Task InitializeAndFlushAsyncAwaited(Task initializeTask, CancellationToken cancellationToken) + private Task FlushAsyncInternal() { - await initializeTask; - await FlushAsyncInternal(cancellationToken); - } - - [MethodImpl(MethodImplOptions.NoInlining)] - private ValueTask FlushAsyncInternal(CancellationToken cancellationToken) - { - _requestProcessingStatus = RequestProcessingStatus.HeadersFlushed; - return Output.FlushAsync(cancellationToken); - } - - private Task WriteDataAsync(ReadOnlyMemory data, CancellationToken cancellationToken) - { - _requestProcessingStatus = RequestProcessingStatus.HeadersFlushed; - return Output.WriteDataAsync(data.Span, cancellationToken: cancellationToken); + return Output.FlushAsync(default).AsTask(); } private void VerifyAndUpdateWrite(int count) @@ -1011,7 +995,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http if (!HasFlushedHeaders) { - return FlushAsyncInternal(default).AsTask(); + _requestProcessingStatus = RequestProcessingStatus.HeadersFlushed; + return FlushAsyncInternal(); } return Task.CompletedTask; @@ -1350,6 +1335,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http if (firstWrite) { var initializeTask = InitializeResponseAsync(data.Length); + // Just about to Flush the headers + _requestProcessingStatus = RequestProcessingStatus.HeadersFlushed; // If return is Task.CompletedTask no awaiting is required if (!ReferenceEquals(initializeTask, Task.CompletedTask)) { @@ -1367,10 +1354,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http { if (data.Length == 0) { - return !firstWrite ? default : FlushAsyncInternal(cancellationToken); + return !firstWrite ? default : Output.FlushAsync(cancellationToken); } - _requestProcessingStatus = RequestProcessingStatus.HeadersFlushed; return Output.WriteChunkAsync(data.Span, cancellationToken); } else @@ -1382,11 +1368,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http else { 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(); } @@ -1415,10 +1401,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http { if (data.Length == 0) { - return await FlushAsyncInternal(cancellationToken); + return await Output.FlushAsync(cancellationToken); } - _requestProcessingStatus = RequestProcessingStatus.HeadersFlushed; return await Output.WriteChunkAsync(data.Span, cancellationToken); } else @@ -1430,7 +1415,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http else { HandleNonBodyResponseWrite(); - return await FlushAsyncInternal(cancellationToken); + return await Output.FlushAsync(cancellationToken); } } }