关于执行顺序和线程ID,写了一个小程序来检测学习:
1 using System; 2 using System.Net; 3 using System.Threading; 4 using System.Threading.Tasks; 5 6 namespace AsyncOrder 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 Console.WriteLine($"Main: befor Task1 。 线程ID:{Thread.CurrentThread.ManagedThreadId}"); 13 const string url1 = "http://www.163.com/"; 14 const string url2 = "http://www.baidu.com/"; 15 16 Task<string> t1 = p1(1, url1); 17 Task<string> t2 = p1(2, url2); 18 19 Console.WriteLine($"网页:{url1}长度:{t1.Result.Length}。 线程ID:{Thread.CurrentThread.ManagedThreadId}"); 20 Console.WriteLine($"网页:{url2}长度:{t2.Result.Length}。 线程ID:{Thread.CurrentThread.ManagedThreadId}"); 21 22 Console.WriteLine("按任意键退出..."); 23 Console.ReadKey(); 24 } 25 26 private static async Task<string> p1(int id, string url = "http://www.baidu.com") 27 { 28 DoSomeThing(id,"P1"); 29 Console.WriteLine($"任务ID:{id} ,p1: befor await。 线程ID:{Thread.CurrentThread.ManagedThreadId}"); 30 string ret = await p2(id,url); 31 Console.WriteLine($"任务ID:{id} ,p1: after await。 线程ID:{Thread.CurrentThread.ManagedThreadId}"); 32 return ret; 33 } 34 35 private static async Task<string> p2(int id, string url = "http://www.baidu.com") 36 { 37 DoSomeThing(id, "P2"); 38 Console.WriteLine($"任务ID:{id} ,p2: befor await。 线程ID:{Thread.CurrentThread.ManagedThreadId}"); 39 string ret = await GetWeb(id, url); 40 Console.WriteLine($"任务ID:{id} ,p2: after await。 线程ID:{Thread.CurrentThread.ManagedThreadId}"); 41 return ret; 42 } 43 44 private static void DoSomeThing(int id, string v) 45 { 46 Console.WriteLine($"任务ID:{id} ,父程序:{v}。 线程ID:{Thread.CurrentThread.ManagedThreadId}"); 47 } 48 49 private static async Task<string> GetWeb(int id , string url = "http://www.baidu.com") 50 { 51 var wc = new WebClient(); 52 Console.WriteLine($"任务ID:{id} ,GetWeb: befor await wc。 线程ID:{Thread.CurrentThread.ManagedThreadId}"); 53 var temp = await wc.DownloadStringTaskAsync(url); 54 Console.WriteLine($"任务ID:{id} ,GetWeb: after await wc。 线程ID:{Thread.CurrentThread.ManagedThreadId}"); 55 return temp.ToString(); 56 } 57 } 58 }
执行结果为: