From 7e9de494b7ed80550843d294daa5836653149e3e Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Fri, 12 Jul 2019 21:47:32 +0200 Subject: [PATCH] Use task.IsCompletedSuccessfully rather than ReferenceEquals (#11606) --- .../src/Buffers/PagedBufferedTextWriter.cs | 12 +++--------- .../Kestrel/Core/src/Internal/Http/HttpProtocol.cs | 13 +++++-------- .../Internal/Infrastructure/KestrelConnection.cs | 2 +- 3 files changed, 9 insertions(+), 18 deletions(-) diff --git a/src/Mvc/Mvc.ViewFeatures/src/Buffers/PagedBufferedTextWriter.cs b/src/Mvc/Mvc.ViewFeatures/src/Buffers/PagedBufferedTextWriter.cs index 9c74598b24..611a03f45c 100644 --- a/src/Mvc/Mvc.ViewFeatures/src/Buffers/PagedBufferedTextWriter.cs +++ b/src/Mvc/Mvc.ViewFeatures/src/Buffers/PagedBufferedTextWriter.cs @@ -109,9 +109,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers { var flushTask = FlushAsyncCore(); - // FlushAsyncCore will return CompletedTask if nothing sync buffered - // Fast-path and skip async state-machine if only a single async operation - return ReferenceEquals(flushTask, Task.CompletedTask) ? + return flushTask.IsCompletedSuccessfully ? _inner.WriteAsync(value) : WriteAsyncAwaited(flushTask, value); } @@ -126,9 +124,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers { var flushTask = FlushAsyncCore(); - // FlushAsyncCore will return CompletedTask if nothing sync buffered - // Fast-path and skip async state-machine if only a single async operation - return ReferenceEquals(flushTask, Task.CompletedTask) ? + return flushTask.IsCompletedSuccessfully ? _inner.WriteAsync(buffer, index, count) : WriteAsyncAwaited(flushTask, buffer, index, count); } @@ -143,9 +139,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers { var flushTask = FlushAsyncCore(); - // FlushAsyncCore will return CompletedTask if nothing sync buffered - // Fast-path and skip async state-machine if only a single async operation - return ReferenceEquals(flushTask, Task.CompletedTask) ? + return flushTask.IsCompletedSuccessfully ? _inner.WriteAsync(value) : WriteAsyncAwaited(flushTask, value); } diff --git a/src/Servers/Kestrel/Core/src/Internal/Http/HttpProtocol.cs b/src/Servers/Kestrel/Core/src/Internal/Http/HttpProtocol.cs index ea0948d8e0..3f879207f2 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Http/HttpProtocol.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Http/HttpProtocol.cs @@ -767,7 +767,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http while (onStarting.TryPop(out var entry)) { var task = entry.Key.Invoke(entry.Value); - if (!ReferenceEquals(task, Task.CompletedTask)) + if (!task.IsCompletedSuccessfully) { return FireOnStartingAwaited(task, onStarting); } @@ -817,7 +817,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http try { var task = entry.Key.Invoke(entry.Value); - if (!ReferenceEquals(task, Task.CompletedTask)) + if (!task.IsCompletedSuccessfully) { return FireOnCompletedAwaited(task, onCompleted); } @@ -953,8 +953,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http public Task InitializeResponseAsync(int firstWriteByteCount) { var startingTask = FireOnStarting(); - // If return is Task.CompletedTask no awaiting is required - if (!ReferenceEquals(startingTask, Task.CompletedTask)) + if (!startingTask.IsCompletedSuccessfully) { return InitializeResponseAwaited(startingTask, firstWriteByteCount); } @@ -1397,8 +1396,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http if (!HasResponseStarted) { var initializeTask = InitializeResponseAsync(0); - // If return is Task.CompletedTask no awaiting is required - if (!ReferenceEquals(initializeTask, Task.CompletedTask)) + if (!initializeTask.IsCompletedSuccessfully) { return FlushAsyncAwaited(initializeTask, cancellationToken); } @@ -1509,8 +1507,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http Debug.Assert(!HasResponseStarted); var startingTask = FireOnStarting(); - - if (!ReferenceEquals(startingTask, Task.CompletedTask)) + if (!startingTask.IsCompletedSuccessfully) { return FirstWriteAsyncAwaited(startingTask, data, cancellationToken); } diff --git a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/KestrelConnection.cs b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/KestrelConnection.cs index cfa274558c..9cbf8f12a1 100644 --- a/src/Servers/Kestrel/Core/src/Internal/Infrastructure/KestrelConnection.cs +++ b/src/Servers/Kestrel/Core/src/Internal/Infrastructure/KestrelConnection.cs @@ -107,7 +107,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure try { var task = entry.Key.Invoke(entry.Value); - if (!ReferenceEquals(task, Task.CompletedTask)) + if (!task.IsCompletedSuccessfully) { return CompleteAsyncAwaited(task, onCompleted); }