public static void Start() { var t= new TestAccessByDifferentThreads(); var threads = new Task[10]; for (int i = 0; i < threads.Length; i++) { threads[i] = new Task(t.S1); threads[i].Start(); } Task.WaitAll(threads); for (int i = 0; i < threads.Length; i++) { threads[i] = new Task(t.S2); threads[i].Start(); } Task.WaitAll(threads); for (int i = 0; i < threads.Length; i++) { threads[i] = new Task(t.S3); threads[i].Start(); } Task.WaitAll(threads); for (int i = 0; i < threads.Length; i++) { threads[i] = new Task(t.S4); threads[i].Start(); } Task.WaitAll(threads); Console.WriteLine(t.res1); Console.WriteLine(t.res2); Console.WriteLine(t.res3); Console.WriteLine(t.res4); }