async和await执行顺序

关于执行顺序和线程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 }

执行结果为:

猜你喜欢

转载自www.cnblogs.com/sunky/p/11750853.html