Task, async, await METÓ DY VÝPOČTOVEJ INTELIGENCIE A C# FA K ULTA E L E K T ROTECHNIKY A INFORMATIKY S LOVENSKÁ T E CHNICKÁ U NIVERZITA Ing. Ľuboš Galandák
Obsah prednášky Čo je to paralelizmus? Čo sú to tasky? Program workflow s použitím async a await Paralelné cykly Príklad aplikácie
Paralelizmus potreba vykonávať viaceré operácie naraz za cieľom dosiahnuť žiadaný výsledok v čo najrýchlejšom čase. ČO J E PA R A L E L IZMUS?
Inou formou paralelizmu je spracovávať náročnú operáciu paralelne. Na túto oblasť sa pozrieme neskôr. ČO J E PA R A L E L IZMUS?
Existuje však ešte tretí pohľad na paralelizmus keď potrebujeme vykonávať operácie na inom, ako UI threade, aby sme zabezpečili nevytuhnutie používateľského rozhrania. ČO J E PA R A L E L IZMUS?
Dokumentácia na msdn.microsoft.com je pomerne skúpa Task reprezentuje asynchrónnu operáciu. ČO SÚ TO TA SKY?
Thread jedná sa o OS level thread, máme nad ním plnú kontrolu, nevýhodou je, že jeho vytvorenie je náročné na systémové prostriedky. ČO SÚ TO TA SKY?
Task je v podstate abstrakciou, vytvorením Tasku nevytvárame automaticky OS thread. Všetko riadi ThreadPool. T HREAD VS TA S K
Spolu so zavedením Taskov zaviedol Microsoft abstrakciu, kde vytváranie Threadov už nie je starosťou programátora, ale zabezpečuje ho TaskScheduler v spolupráci s ThreadPoolom. ČO SÚ TO TA SKY?
Vytvorením Tasku zabezpečíme, že operáciu, ktorá je zaobalená Taskom, sa vykoná asynchrónne. Konštruktor: Task(Action) Task(Action, CancelationToken) Task(Action, CancelationToken, TaskCreationOptions)... ČO SÚ TO TA SKY?
Často používané metódy: ContinueWith(Action) Delay(Int32) Run(Action) Start() Wait() / WaitAll() ČO SÚ TO TA SKY?
Spolu s Taskami zaviedol Microsoft aj štandard označovania asynchrónnych operácií v podobe async a await. P R O G R A M WORKFLO W S POUŽITÍM A S Y NC A AWA I T
Príklady použitia keď UI nesmie ostať neresponzívne, ale my potrebujeme na pozadí získať / spracovať množstvo dát. P R O G R A M WORKFLO W S POUŽITÍM A S Y NC A AWA I T
Aplikačná oblasť Prístup na web Práca so súbormi Práca s obrázkami WCF API obsahujúce asynchrónne metódy HttpClient, SyndicationClient StorageFile, StreamWriter, StreamReader, XmlReader MediaCapture, BitmapEncoder, BitmapDecoder Synchrónne a Asynchrónne operácie P R O G R A M WORKFLO W S POUŽITÍM A S Y NC A AWA I T
každá async metóda, ak má byť asynchrónna, musí obsahovať await asynchrónna metóda (s výnimkou event handlera) musí byť typu Task, alebo Task<T> operácie medzi definíciou Tasku a await bežia synchrónne P R O G R A M WORKFLO W S POUŽITÍM A S Y NC A AWA I T
Tip k Async Await: Skoro všetky moderné API poskytujú Async metódy (napr. GetStringAsync). Pre zrýchlenie behu programu sa odporúča používať vždy tieto metódy namiesto ich synchrónnych alternatív. Ich názov končí kľúčovým slovom Async. Pri písaní vlastných asynchrónnych metód sa tiež odporúča doplniť ich názov označením Async. P R O G R A M WORKFLO W S POUŽITÍM A S Y NC A AWA I T
Majme pomerne náročný algoritmus spracovania dát, ktorý k tomu beží vo for cykle s mnohými opakovaniami. Pre tento účel použijeme v C#: Parallel.For(int start, int end, Action body) PA R A L E LNÉ CYKLY
Parallel.ForEach() Parallel.ForEach<TSource> Method (I Enumerable<TSource>, Action<TSource, ParallelLoopState, Int64>) PA R A L E LNÉ CYKLY
Paralelné metódy sa zdajú byť univerzálnym spôsobom ako zrýchliť beh programu, ale pozor!!! Vytvorenie Threadov (pomocou ThreadPoolu) je náročná operácia a zaberie značné množstvo systémových prostriedkov, preto si treba vždy vopred zvážiť, či je paralelizmus naozaj vhodný a naozaj zrýchli beh programu. V opačnom prípade použijeme klasický for, prípadne foreach. D O B R Á R A DA NA Z ÁVER
https://msdn.microsoft.com/enus/library/system.threading.tasks.parallel_methods(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/mt674882.aspx https://msdn.microsoft.com/enus/library/system.threading.tasks.taskscheduler(v=vs.110). as px https://msdn.microsoft.com/enus/library/system.threading.tasks.task(v=vs.110).aspx Z D R OJ E