From 98ed01ab072737d3444db3b05f7a90f71bbdbe09 Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Wed, 6 May 2020 08:17:50 -0700 Subject: [PATCH] Convert ValueTask to a Task before blocking --- .../Azure.Core/src/Shared/TaskExtensions.cs | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/sdk/core/Azure.Core/src/Shared/TaskExtensions.cs b/sdk/core/Azure.Core/src/Shared/TaskExtensions.cs index 518058d118d6..1d6b85011b30 100644 --- a/sdk/core/Azure.Core/src/Shared/TaskExtensions.cs +++ b/sdk/core/Azure.Core/src/Shared/TaskExtensions.cs @@ -39,8 +39,16 @@ public static T EnsureCompleted(this ValueTask task) #if DEBUG VerifyTaskCompleted(task.IsCompleted); #endif + #pragma warning disable AZC0102 // Do not use GetAwaiter().GetResult(). Use the TaskExtensions.EnsureCompleted() extension method instead. - return task.GetAwaiter().GetResult(); + if (task.IsCompleted) + { + return task.GetAwaiter().GetResult(); + } + else + { + return task.AsTask().GetAwaiter().GetResult(); + } #pragma warning restore AZC0102 // Do not use GetAwaiter().GetResult(). Use the TaskExtensions.EnsureCompleted() extension method instead. } @@ -49,8 +57,16 @@ public static void EnsureCompleted(this ValueTask task) #if DEBUG VerifyTaskCompleted(task.IsCompleted); #endif + #pragma warning disable AZC0102 // Do not use GetAwaiter().GetResult(). Use the TaskExtensions.EnsureCompleted() extension method instead. - task.GetAwaiter().GetResult(); + if (task.IsCompleted) + { + task.GetAwaiter().GetResult(); + } + else + { + task.AsTask().GetAwaiter().GetResult(); + } #pragma warning restore AZC0102 // Do not use GetAwaiter().GetResult(). Use the TaskExtensions.EnsureCompleted() extension method instead. } @@ -69,7 +85,6 @@ public static ConfiguredValueTaskAwaitable EnsureCompleted(this Configured public static ConfiguredValueTaskAwaitable EnsureCompleted(this ConfiguredValueTaskAwaitable awaitable, bool async) { - if (!async) { #if DEBUG