public class TaskTest { public static async Task<int> MultiTask(int i, int marker) { if(i == 0) { return 0; }
Console.Write(marker); return await MultiTask(--i, marker); } public static async Task<int> MultiTask1(int i, int marker) { for (int j = 0; j < i; ++j) { new Task<int>(() => { Console.Write(marker); return 0; }).Start(); }
return 0; } public static async Task<int> SingleTask(int i, int marker) { for (int j = 0; j < i; ++j) { Console.Write(marker); } return i; } public static int SingleTaskR(int i, int marker) { if (i == 0) { return 0; }
Console.Write(marker); return SingleTaskR(--i, marker); } public static int SingleTaskNR(int i, int marker) { for (int j = 0; j < i; ++j) { Console.Write(marker); } return i; } public static async void Test1() { Console.WriteLine("start");
List<Int64> multi = new List<long>(); List<Int64> single = new List<long>(); List<Int64> singleR = new List<long>(); List<Int64> singleNR = new List<long>();
for (int i = 0; i < 20; ++i) { var ret2 = MultiTask1(1000, 1);
Stopwatch sw = new Stopwatch(); sw.Reset(); sw.Start(); var ret = MultiTask(1000, 2); sw.Stop();
multi.Add(sw.ElapsedMilliseconds); //Console.WriteLine("m" + sw.ElapsedMilliseconds.ToString());
Task.WaitAll(new []{ ret2, ret }, 5000);
Thread.Sleep(500);
var ret3 = MultiTask1(1000, 3);
Stopwatch sw1 = new Stopwatch(); sw1.Reset(); sw1.Start(); var ret4 = SingleTask(1000, 4); sw1.Stop();
single.Add(sw1.ElapsedMilliseconds); //Console.WriteLine("s" + sw.ElapsedMilliseconds.ToString());
Task.WaitAll(new[] { ret3, ret4 }, 5000);
Thread.Sleep(500);
Stopwatch sw2 = new Stopwatch(); sw2.Reset(); sw2.Start(); SingleTaskR(1000, 5); sw2.Stop();
singleR.Add(sw2.ElapsedMilliseconds); Stopwatch sw3 = new Stopwatch(); sw3.Reset(); sw3.Start(); SingleTaskR(1000, 6); sw3.Stop();
singleNR.Add(sw3.ElapsedMilliseconds);
} Console.WriteLine("m avg:" + multi.Average()); Console.WriteLine("s avg:" + single.Average()); Console.WriteLine("sR avg:" + singleR.Average()); Console.WriteLine("sNR avg:" + singleNR.Average()); } } |