From 2d0959505c5812d56cb0fc83f455a5c77fcc4e99 Mon Sep 17 00:00:00 2001 From: Vladimir Pecanac Date: Fri, 14 Aug 2026 13:24:40 +0200 Subject: [PATCH] DifferenceBetweenAwaitAndTaskWaitInCsharp: retarget net10.0, add Task.WhenAll/WhenAny/Delay example --- .../CodeExamples.cs | 38 +++++++++++++++++++ ...enceBetweenAwaitAndTaskWaitInCsharp.csproj | 2 +- .../Program.cs | 2 + .../Tests/Tests.csproj | 10 ++--- .../Tests/UnitTests.cs | 3 +- 5 files changed, 47 insertions(+), 8 deletions(-) diff --git a/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/CodeExamples.cs b/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/CodeExamples.cs index e9f3050c03..43f6621c4b 100644 --- a/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/CodeExamples.cs +++ b/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/CodeExamples.cs @@ -76,4 +76,42 @@ public async static Task AsynchronousExceptionHandlingAsync() Console.WriteLine(ex.Message); } } + + public async static Task NonBlockingWaitExamplesAsync() + { + Console.WriteLine("** Non-Blocking Wait Examples **"); + + Task singleTask = Task.Run(() => + { + Thread.Sleep(10); + + return "Hello, from a single awaited task"; + }); + + string singleResult = await singleTask; + Console.WriteLine(singleResult); + + Task firstTask = Task.Run(() => + { + Thread.Sleep(10); + + return "Hello, from the first task"; + }); + + Task secondTask = Task.Run(() => + { + Thread.Sleep(20); + + return "Hello, from the second task"; + }); + + string[] allResults = await Task.WhenAll(firstTask, secondTask); + Console.WriteLine($"Both tasks finished: {string.Join(", ", allResults)}"); + + Task firstToFinish = await Task.WhenAny(firstTask, secondTask); + Console.WriteLine($"First task to finish: {firstToFinish.Result}"); + + await Task.Delay(10); + Console.WriteLine("Waited 10ms without blocking the thread"); + } } diff --git a/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp.csproj b/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp.csproj index 2150e3797b..ed9781c223 100644 --- a/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp.csproj +++ b/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net10.0 enable enable diff --git a/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/Program.cs b/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/Program.cs index 434944e070..4be584c0ae 100644 --- a/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/Program.cs +++ b/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/Program.cs @@ -3,5 +3,7 @@ CodeExamples.BlockingCodeExample(); await CodeExamples.AsynchronousCodeExampleAsync(); +await CodeExamples.NonBlockingWaitExamplesAsync(); + await CodeExamples.AsynchronousExceptionHandlingAsync(); CodeExamples.BlockingExceptionHandling(); \ No newline at end of file diff --git a/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/Tests/Tests.csproj b/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/Tests/Tests.csproj index 7635427012..0a8ea5d4a9 100644 --- a/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/Tests/Tests.csproj +++ b/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/Tests/Tests.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 enable enable @@ -10,10 +10,10 @@ - - - - + + + + diff --git a/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/Tests/UnitTests.cs b/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/Tests/UnitTests.cs index 804a4e5cee..d0e2ad8a3e 100644 --- a/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/Tests/UnitTests.cs +++ b/async-csharp/DifferenceBetweenAwaitAndTaskWaitInCsharp/Tests/UnitTests.cs @@ -6,9 +6,8 @@ namespace Tests; public class UnitTests { [TestMethod] - [ExpectedException(typeof(AggregateException))] public void GivenAFailingTask_WhenTaskWaitIsCalled_ThenAggregateExceptionIsRaised() { - CodeExamples.BlockingExceptionHandling(); + Assert.ThrowsExactly(() => CodeExamples.BlockingExceptionHandling()); } } \ No newline at end of file