上述代码如下:
1 public partial class Form1 : Form 2 { 3 private readonly HttpClient httpClient = new HttpClient(); 4 5 public Form1() 6 { 7 InitializeComponent(); 8 } 9 10 private async Task DownloadWebsitesAsync() 11 { 12 List<Task<string>> downloadWebsiteTasks = new List<Task<string>>(); 13 14 foreach (var site in Contents.WebSites) 15 { 16 downloadWebsiteTasks.Add(DownloadWebSiteAsync(site)); 17 } 18 19 //ConfigureAwait指示线程池里是否返回当前的线程(这里时UI线程),默认=true, 20 //如果等于false指示不要返回当前线程,在线程池里利用线程继续执行后续的代码 21 var results = await Task.WhenAll(downloadWebsiteTasks).ConfigureAwait(false);//注意ConfigureAwait=false 22 23 foreach (var result in results) 24 { 25 //界面打印结果 26 Textbox.Text += result; 27 } 28 } 29 30 private async Task<string> DownloadWebSiteAsync(string url) 31 { 32 33 var response = await httpClient.GetAsync(url); 34 var responsePayloadBytes = await response.Content.ReadAsByteArrayAsync(); 35 36 return $"Finish downloding data from {url}. Total bytes returned {responsePayloadBytes.Length}. {Environment.NewLine}"; 37 } 38 39 40 private async void AsyncDownload_Click(object sender, EventArgs e) 41 { 42 Textbox.Text = ""; 43 44 var stopwatch = Stopwatch.StartNew(); 45 46 await DownloadWebsitesAsync(); 47 48 Textbox.Text += $"Elapsed time: {stopwatch.Elapsed}{Environment.NewLine}"; 49 } 50 51 private void Result_TextChanged(object sender, EventArgs e) 52 { 53 54 } 55 }
public class Contents { public static readonly IEnumerable<string> WebSites = new string[] { "https://www.zhihu.com", "https://www.baidu.com", "https://www.weibo.com", "https://www.stackoverflow.com", "https://docs.microsoft.com", "https://docs.microsoft.com/aspnet/core", "https://docs.microsoft.com/azure", "https://docs.microsoft.com/azure/devops", "https://docs.microsoft.com/dotnet", "https://docs.microsoft.com/dynamics365", "https://docs.microsoft.com/education", "https://docs.microsoft.com/enterprise-mobility-security", "https://docs.microsoft.com/gaming", "https://docs.microsoft.com/graph", "https://docs.microsoft.com/microsoft-365", "https://docs.microsoft.com/office", "https://docs.microsoft.com/powershell", "https://docs.microsoft.com/sql", "https://docs.microsoft.com/surface", "https://docs.microsoft.com/system-center", "https://docs.microsoft.com/visualstudio", "https://docs.microsoft.com/windows", "https://docs.microsoft.com/xamarin" }; }