diff --git a/projects/RabbitMQ.Client/client/TaskExtensions.cs b/projects/RabbitMQ.Client/client/TaskExtensions.cs index ad1e8fb7b..45bd7717e 100644 --- a/projects/RabbitMQ.Client/client/TaskExtensions.cs +++ b/projects/RabbitMQ.Client/client/TaskExtensions.cs @@ -75,15 +75,21 @@ static async Task TimeoutAfterImplement(Task task, TimeSpan timeout) #endif } - public static async ValueTask TimeoutAfter(this ValueTask task, TimeSpan timeout) + public static ValueTask TimeoutAfter(this ValueTask task, TimeSpan timeout) { - if (false == task.IsCompletedSuccessfully) + if (task.IsCompletedSuccessfully) { - Task actualTask = task.AsTask(); + return task; + } + #if NET6_0_OR_GREATER - await actualTask.WaitAsync(timeout) - .ConfigureAwait(false); + return actualTask.WaitAsync(timeout); #else + return TimeoutAfterImplement(task, timeout); + + assync static ValueTask TimeoutAfterImpl(ValueTask task, TimeSpan timeout) + { + Task actualTask = task.AsTask(); if (actualTask == await Task.WhenAny(actualTask, Task.Delay(timeout)).ConfigureAwait(false)) { await actualTask.ConfigureAwait(false); @@ -98,6 +104,7 @@ await actualTask.WaitAsync(timeout) scheduler: TaskScheduler.Default); throw new TimeoutException(); } + } #endif } }