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