Thread és Task
Emlékeztető System.Threading.Thread osztály Metódusok Start() Szál indítása Suspend(), Resume() Szál felfüggesztése, illetve folytatása Abort() Szál leállítása GetHashCode() Szál azonosítójának lekérése Sleep() Várakozás a megadott időintervallum elteltéig Join() Várakozás az adott szál befejeződésére Tulajdonságok CurrentCulture, CurrentUICulture A szálhoz tartozó aktuális kultúra, illetve a szálhoz tartozó felhasználói felület kiválasztott nyelve IsBackground Az adott szál háttérszál vagy előtérszál* IsThreadPoolThread Az adott szál a ThreadPool egyik szála-e ManagedThreadID A szál egyedi azonosítója Name A szál megnevezése Priority A szál prioritása (fontossági szintje) ThreadState A szál aktuális állapota(i) * A programok futása véget ér, ha az utolsó előtérszál is lefutott (az esetleg még futó háttérszálak ekkor automatikusan megszűnnek).
Hello világ! using System; using System.Threading; namespace _01_HelloWorld { class Program static void Main(string[] args) Thread t = new Thread(Koszon); Console.WriteLine("Szál indítása!"); t.Start(); Console.WriteLine("Várakozás a befejezésre..."); t.Join(); Console.ReadLine(); } static void Koszon() Console.WriteLine("Hello világ!"); Megj. hívjátok fel a figyelmet, hogy a kód nem jó (Start(), Join() egymás utáni sorokban egyből ki is nyírja a párhuzamosságot)
Paraméter átadása static void Main(string[] args) { Thread t = new Thread(Koszon); Console.WriteLine("Szál indítása!"); t.Start("Pistike"); Console.WriteLine("Várakozás a befejezésre..."); t.Join(); Console.ReadLine(); } static void Koszon(object o) string nev = o.ToString(); Console.WriteLine("Hello " + o + "!"); Megj. hívjátok fel a figyelmet, hogy a kód nem jó (Start(), Join() egymás utáni sorokban egyből ki is nyírja a párhuzamosságot)
Szálpárhuzamosság Thread t = new Thread(Kiir); Thread.Sleep(1500); Console.WriteLine("asd"); }); t.Start(); t2.Start(); for (int i = 0; i < 20; i++) { Thread.Sleep(100); Console.WriteLine("Várakozás #{0}", i); } Megj. hívjátok fel a figyelmet, hogy a kód nem jó (Start(), Join() egymás utáni sorokban egyből ki is nyírja a párhuzamosságot)
Feladat Hozzon létre konzolos alkalmazást, amelynek segítségével előre beállítható darabszámú weboldal teljesítményét tudjuk 10-10 másodpercen át tesztelni külön szálakon futó System.Net.WebClient().DownloadString(url) metódushívások segítségével. A megoldáshoz használjon Threadeket!
Emlékeztető Task t1 = new Task(Kiir); Task t2 = new Task(() => { Console.WriteLine("asdasd"); }); //Task t = new Task(Action action) Task<int> t3 = new Task<int>(() => { Thread.Sleep(1000); return 42; }); t1.Start(); Task t4 = Task.Run(() => { Console.WriteLine("valami"); }); t1.Wait(); //Task.WaitAll(t1, t2, t3); //params Task[] //Task.WaitAll(new Task[] { t1, t2, t3 }); t3.Start(); Console.WriteLine(t3.Result); //Wait Task hosszuTask = new Task(() => { Thread.Sleep(1000); }); hosszuTask.ContinueWith(x => { Console.WriteLine("Vége a hosszú tasknak!"); }); hosszuTask.Start(); Megj. hívjátok fel a figyelmet, hogy a kód nem jó (Start(), Join() egymás utáni sorokban egyből ki is nyírja a párhuzamosságot)
Feladat Egy RSS-olvasó program készítése a feladat. Az RSS állományok szabványos XML strukturájú dokumentumok, amelyeket jellemzőn hírportálok alkalmaznak arra, hogy a feliratkozóikat értesíteni tudják a friss tartalmakról. OE-NIK HP
Feladat A feladat egy könyvtár méretének meghatározása, alkönyvtárakkal együtt. Ehhez minden a könyvtárban (és alkönyváraiban, és azok alkönyvtáraiban…) levő fájl méretét le kell kérdezni és összegezni. a) Hiba esetén (pl. nincs megfelelő jogosultság a könyvtárba lépéshez) ezeljük a keletkezett kivételt. Célszerű esetleg folytatni a műveletet. b) Legyen lehetőség a leállításra (Cancel) OE-NIK HP