C# 多线程里的ConfigureAwait作用

 

 

 上述代码如下:

 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"
        };
    }

 

posted on 2021-11-18 17:40  Shine-Zhong  阅读(419)  评论(0编辑  收藏  举报

导航