publicpartialclassMainWindow:Window{publicMainWindow(){InitializeComponent();}// TASK IS FROZENprivatevoidexecuteSync_Click(objectsender,RoutedEventArgse){varwatch=System.Diagnostics.Stopwatch.StartNew();RunDownloadSync();watch.Stop();varelapsedMs=watch.ElapsedMilliseconds;resultsWindow.Text+=$"Total execution time: { elapsedMs }";}privateasyncvoidexecuteAsync_Click(objectsender,RoutedEventArgse){varwatch=System.Diagnostics.Stopwatch.StartNew();// Without await it would first print out time then all the sitesawaitRunDownloadParallelAsync();watch.Stop();varelapsedMs=watch.ElapsedMilliseconds;resultsWindow.Text+=$"Total execution time: { elapsedMs }";}privateList<string>PrepData(){List<string>output=newList<string>();resultsWindow.Text="";output.Add("https://www.yahoo.com");output.Add("https://www.google.com");output.Add("https://www.microsoft.com");output.Add("https://www.cnn.com");output.Add("https://www.codeproject.com");output.Add("https://www.stackoverflow.com");returnoutput;}privateasyncTaskRunDownloadAsync(){List<string>websites=PrepData();foreach(stringsiteinwebsites){WebsiteDataModelresults=awaitTask.Run(()=>DownloadWebsite(site));ReportWebsiteInfo(results);}}privateasyncTaskRunDownloadParallelAsync(){List<string>websites=PrepData();List<Task<WebsiteDataModel>>tasks=newList<Task<WebsiteDataModel>>();foreach(stringsiteinwebsites){// tasks.Add(DownloadWebsiteAsync(site));tasks.Add(Task.Run(()=>DownloadWebsite(site)))}varresults=awaitTask.WhenAll(tasks);foreach(variteminresults){ReportWebsiteInfo(item);}}privatevoidRunDownloadSync(){List<string>websites=PrepData();foreach(stringsiteinwebsites){WebsiteDataModelresults=DownloadWebsite(site);ReportWebsiteInfo(results);}}privateWebsiteDataModelDownloadWebsite(stringwebsiteURL){WebsiteDataModeloutput=newWebsiteDataModel();WebClientclient=newWebClient();output.WebsiteUrl=websiteURL;output.WebsiteData=client.DownloadString(websiteURL);returnoutput;}privateasyncTask<WebsiteDataModel>DownloadWebsiteAsync(stringwebsiteURL){WebsiteDataModeloutput=newWebsiteDataModel();WebClientclient=newWebClient();output.WebsiteUrl=websiteURL;output.WebsiteData=awaitclient.DownloadStringTaskAsync(websiteURL);returnoutput;}privatevoidReportWebsiteInfo(WebsiteDataModeldata){resultsWindow.Text+=$"{ data.WebsiteUrl } downloaded: { data.WebsiteData.Length } characters long.{ Environment.NewLine }";}}
asyncTask<int>Delay1(){awaitTask.Delay(1000);return1;}asyncTask<int>Delay2(){awaitTask.Delay(2000);return2;}asyncTask<int>Delay3(){awaitTask.Delay(3000);return3;}vart1=Delay1();vart2=Delay2();vart3=Delay3();// Include handling of results ↓↓↓ this takes 3s in total ↓↓↓Console.WriteLine("{0} {1} {2}",awaitt1,awaitt2,awaitt3);// Or, without handling the results:awaitTask.WhenAll(t1,t2,t3);Console.WriteLine("All done!");