private WebsiteDataModel DownloadWebsite(string websiteURL) { WebsiteDataModel output = new WebsiteDataModel(); WebClient client = new WebClient(); output.WebsiteUrl = websiteURL; output.WebsiteData = client.DownloadString(websiteURL); return(output); }
private void RunDownloadSync() { List <string> websites = PrepData(); foreach (var site in websites) { WebsiteDataModel result = DownloadWebsite(site); ReportWebsiteInfo(result); } }
///Teraz Async ale DownloadWebsite bd ez asynchroniczne (czyli nie musi być obudowane przez Task.Run /// private async Task <WebsiteDataModel> DownloadWebsiteAsync(string websiteURL) { WebsiteDataModel output = new WebsiteDataModel(); WebClient client = new WebClient(); output.WebsiteUrl = websiteURL; output.WebsiteData = await client.DownloadStringTaskAsync(websiteURL); // client ma ze soba od razu przyniesiona async wersje funkcji Download return(output); }
private async Task RunDownloadAsync() { List <string> websites = PrepData(); foreach (var site in websites) { WebsiteDataModel result = await Task.Run(() => DownloadWebsite(site)); //Task obudowuje asynchronicznie WebsiteDataModel to co ma zwrócić //slowko await mowi ze ma poczekac na to co ma byc zwrocone, wiec wykonaj to asnychronicznie ale poczekaj -> robie tak bo Report potrzebuje resulta wiec musi poczekac az go zrobi //zeby await działał musi być metoda asynchroniczna stad dopisane do metody słowo async //Natomaist TaskRun obudowuje dodatkowo cała funkcje downloadWebsite ktora sama w sobie nie jest asynchroniczna ReportWebsiteInfo(result); //nie zwracaj nigdy voida z metody async, jezeli nie masz nic do zwrócenia zwróć Task, jezeli masz zwrocic string to zwroc to ale jako Task<string> //dobrze jest do kazdej metodki ktora dziala asynchronicznie dopisac ASYNC na nkoniec } }
private void ReportWebsiteInfo(WebsiteDataModel data) { resultsWindow.Text += $"{data.WebsiteUrl} downloaded: {data.WebsiteData.Length} characters long.{Environment.NewLine}"; }