Esileht > Uncategorized > Erinevate ülesannete rööpkäivitamine

Erinevate ülesannete rööpkäivitamine


Seni oleme vaadanud, kuidas andmeid rööpselt töödelda. Aga tegelikult saab rööpselt käivitada täiesti erinevaid ülesandeid.

Toome näite: programmi käivitamisel on vaja internetist alla laadida 3 faili. Esimene asi, mis pähe kargab, on teha seda asünkroonselt WebClient.DownloadStringAsync abil. Pole paha mõte. Iga DownloadStringCompleted sündmus kontrollib, kas kõik failid on juba alla tulnud või on mõni veel puudu.

Parallel.Invoke()

Rööplemine on siin palju lihtsam:

string a = "", b = "", c = "";
      
Parallel.Invoke
(
  () => { a = new WebClient().DownloadString("http://1.com"); },
  () => { b = new WebClient().DownloadString("http://2.com"); },
  () => { c = new WebClient().DownloadString("http://3.com"); }
);

Parallel.Invoke() võtab nii palju funktsioone, kui sa tahad anda, ja lõpetab siis, kui kõik need on valmis saanud. Antud juhtumil lõpetatakse siis pärast kõigi kolme stringi allalaadimist. Lihtne, kas pole?

Task.Factory

Teine tore loom on Task.Factory, mis võimaldab luua ülesandeid ühekaupa ja siis nende täitmist ootama jääda.

List<Task> tasks = new List<Task>();
tasks.Add(Task.Factory.StartNew(() => { a = new WebClient().DownloadString("http://1.com&quot;); }));
tasks.Add(Task.Factory.StartNew(() => { b = new WebClient().DownloadString("http://2.com&quot;); }));
tasks.Add(Task.Factory.StartNew(() => { c = new WebClient().DownloadString("http://3.com&quot;); }));
Task.WaitAny(tasks.ToArray(), TimeSpan.FromSeconds(5));

Task.Factory.StartNew() tagastab viivitamatult Task-objekti, käivitades ülesande taustal.

Task.WaitAll() võtab suvalise arvu ülesandeid (Task-objekte) ja ootab, kuni kõik on täidetud. Lisatingimusena võib anda ajalõpu limiidi.

Teine sarnane meetod on Task.WaitAny(), mis ootab, kuni ükskõik milline ülesannetest on täidetud. Selle tagastudes on tavaliselt täitunud ainult üks ülesannetest.

Jep, rööplemine on tõesti mõnus. Üldiselt ei ole see hädavajalik, sest teiste meetoditega võib saavutada samu tulemusi, kuid see on lihtne kasutada ja loogiliselt üles ehitatud. Ja loomulikult on selline kood palju paremini loetav.

Advertisements
Rubriigid:Uncategorized
  1. Kommentaare veel pole.
  1. No trackbacks yet.

Lisa kommentaar

Kommenteerimiseks palun logi sisse, kasutades üht neist võimalustest:

WordPress.com Logo

Sa kommenteerid kasutades oma WordPress.com kontot. Logi välja / Muuda )

Twitter picture

Sa kommenteerid kasutades oma Twitter kontot. Logi välja / Muuda )

Facebook photo

Sa kommenteerid kasutades oma Facebook kontot. Logi välja / Muuda )

Google+ photo

Sa kommenteerid kasutades oma Google+ kontot. Logi välja / Muuda )

Connecting to %s

%d bloggers like this: