From 090bf59da6a82815afa860bbedcf7ed0b4bcebec Mon Sep 17 00:00:00 2001 From: Vladimir Pecanac Date: Mon, 24 Aug 2026 13:45:49 +0200 Subject: [PATCH] Async vs Multithreading: retarget net10.0, Environment.CurrentManagedThreadId, drop ThreadStart ceremony, join the worker threads - AsynchronousProgramming and Tests retargeted net6.0 -> net10.0 - Test SDK 16.11.0 -> 17.14.1, MSTest 2.2.7 -> 3.10.4 - Thread.CurrentThread.ManagedThreadId -> Environment.CurrentManagedThreadId in all six demo methods - new Thread(new ThreadStart(M)) -> new Thread(M) - ExecuteMultithreading() now joins t1/t2/t3 so the demo output no longer races process shutdown --- .../AsynchronousProgramming.csproj | 4 ++-- .../Multithreading.cs | 22 +++++++++++-------- .../Asynchronous Programming/Program.cs | 12 +++++----- .../Tests/Tests.csproj | 10 ++++----- 4 files changed, 26 insertions(+), 22 deletions(-) diff --git a/async-csharp/Asynchronous Programming vs Multithreading/Asynchronous Programming/AsynchronousProgramming.csproj b/async-csharp/Asynchronous Programming vs Multithreading/Asynchronous Programming/AsynchronousProgramming.csproj index 8e16405400..a509d49daa 100644 --- a/async-csharp/Asynchronous Programming vs Multithreading/Asynchronous Programming/AsynchronousProgramming.csproj +++ b/async-csharp/Asynchronous Programming vs Multithreading/Asynchronous Programming/AsynchronousProgramming.csproj @@ -1,8 +1,8 @@ - + Exe - net6.0 + net10.0 Asynchronous_Programming enable enable diff --git a/async-csharp/Asynchronous Programming vs Multithreading/Asynchronous Programming/Multithreading.cs b/async-csharp/Asynchronous Programming vs Multithreading/Asynchronous Programming/Multithreading.cs index 4a92d3fee1..c0a06fc5af 100644 --- a/async-csharp/Asynchronous Programming vs Multithreading/Asynchronous Programming/Multithreading.cs +++ b/async-csharp/Asynchronous Programming vs Multithreading/Asynchronous Programming/Multithreading.cs @@ -4,34 +4,38 @@ public class Multithreading { public void FirstMethod() { - Console.WriteLine("First Multithreading Method on Thread with Id: " + Thread.CurrentThread.ManagedThreadId); + Console.WriteLine("First Multithreading Method on Thread with Id: " + Environment.CurrentManagedThreadId); Thread.Sleep(1000); - Console.WriteLine("First Multithreading Method Continuation on Thread with Id: " + Thread.CurrentThread.ManagedThreadId); + Console.WriteLine("First Multithreading Method Continuation on Thread with Id: " + Environment.CurrentManagedThreadId); } public void SecondMethod() { - Console.WriteLine("Second Multithreading Method on Thread with Id: " + Thread.CurrentThread.ManagedThreadId); + Console.WriteLine("Second Multithreading Method on Thread with Id: " + Environment.CurrentManagedThreadId); Thread.Sleep(1000); - Console.WriteLine("Second Multithreading Method Continuation on Thread with Id: " + Thread.CurrentThread.ManagedThreadId); + Console.WriteLine("Second Multithreading Method Continuation on Thread with Id: " + Environment.CurrentManagedThreadId); } public void ThirdMethod() { - Console.WriteLine("Third Multithreading Method on Thread with Id: " + Thread.CurrentThread.ManagedThreadId); + Console.WriteLine("Third Multithreading Method on Thread with Id: " + Environment.CurrentManagedThreadId); Thread.Sleep(1000); - Console.WriteLine("Third Multithreading Method Continuation on Thread with Id: " + Thread.CurrentThread.ManagedThreadId); + Console.WriteLine("Third Multithreading Method Continuation on Thread with Id: " + Environment.CurrentManagedThreadId); } public void ExecuteMultithreading() { - Thread t1 = new Thread(new ThreadStart(FirstMethod)); - Thread t2 = new Thread(new ThreadStart(SecondMethod)); - Thread t3 = new Thread(new ThreadStart(ThirdMethod)); + Thread t1 = new Thread(FirstMethod); + Thread t2 = new Thread(SecondMethod); + Thread t3 = new Thread(ThirdMethod); t1.Start(); t2.Start(); t3.Start(); + + t1.Join(); + t2.Join(); + t3.Join(); } } } diff --git a/async-csharp/Asynchronous Programming vs Multithreading/Asynchronous Programming/Program.cs b/async-csharp/Asynchronous Programming vs Multithreading/Asynchronous Programming/Program.cs index 14c2505936..e783cd18df 100644 --- a/async-csharp/Asynchronous Programming vs Multithreading/Asynchronous Programming/Program.cs +++ b/async-csharp/Asynchronous Programming vs Multithreading/Asynchronous Programming/Program.cs @@ -6,23 +6,23 @@ public class Program { public static async Task FirstAsync() { - Console.WriteLine("First Async Method on Thread with Id: " + Thread.CurrentThread.ManagedThreadId); + Console.WriteLine("First Async Method on Thread with Id: " + Environment.CurrentManagedThreadId); await Task.Delay(1000); - Console.WriteLine("First Async Method Continuation on Thread with Id: " + Thread.CurrentThread.ManagedThreadId); + Console.WriteLine("First Async Method Continuation on Thread with Id: " + Environment.CurrentManagedThreadId); } public static async Task SecondAsync() { - Console.WriteLine("Second Async Method on Thread with Id: " + Thread.CurrentThread.ManagedThreadId); + Console.WriteLine("Second Async Method on Thread with Id: " + Environment.CurrentManagedThreadId); await Task.Delay(1000); - Console.WriteLine("Second Async Method Continuation on Thread with Id: " + Thread.CurrentThread.ManagedThreadId); + Console.WriteLine("Second Async Method Continuation on Thread with Id: " + Environment.CurrentManagedThreadId); } public static async Task ThirdAsync() { - Console.WriteLine("Third Async Method on Thread with Id: " + Thread.CurrentThread.ManagedThreadId); + Console.WriteLine("Third Async Method on Thread with Id: " + Environment.CurrentManagedThreadId); await Task.Delay(1000); - Console.WriteLine("Third Async Method Continuation on Thread with Id: " + Thread.CurrentThread.ManagedThreadId); + Console.WriteLine("Third Async Method Continuation on Thread with Id: " + Environment.CurrentManagedThreadId); } public static async Task ExecuteAsyncFunctions() diff --git a/async-csharp/Asynchronous Programming vs Multithreading/Tests/Tests.csproj b/async-csharp/Asynchronous Programming vs Multithreading/Tests/Tests.csproj index e25486b6ba..a50a8dc4b8 100644 --- a/async-csharp/Asynchronous Programming vs Multithreading/Tests/Tests.csproj +++ b/async-csharp/Asynchronous Programming vs Multithreading/Tests/Tests.csproj @@ -1,7 +1,7 @@ - + - net6.0 + net10.0 Asynchronous_Programming_Tests enable @@ -9,9 +9,9 @@ - - - + + +