Async – Magična Riječ Za Uspjeh Vase Aplikacije
-
Upload
bahrudin-hrnjica -
Category
Documents
-
view
233 -
download
0
Transcript of Async – Magična Riječ Za Uspjeh Vase Aplikacije
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
1/24
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
2/24
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
3/24
async – magična riječ za uspjehvaše aplikacije
Bahrudin HrnjicaSenior DeveloperMicrosoft MVP C#
HMDN
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
4/24
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
5/24
Agenda
6 značajki za bolju implementaciju vaše aplik
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
6/24
Umotavanja eventa u ask za poboljšakontrole toka koda
•
!odrška• ask"ompletion#ource$%• &oristi se za umotavanja operacija u ask klasu• A kad se umota' mo(emo je koristiti kao svaki drugi task objekat
• !attern
public async Task RunStoryboardAsync(this { var tcs = new TaskCompletionSource
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
7/24
• askovi na čekanju +a,aiting tasks- su pogodni za implementaciju niza op
trebaju da se izvrše.
Umotavanje +/rapping- 0venta
za poboljšanje kontrole toka ko
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
8/24
&oristiti 1"ancellation2 za poboljšanje oaplikacije
• !odrška u .30• "ancellationoken kao mehanizam za implamentaciju prek
aplikaciji• var cts 4 ne, "ancellationoken#ource+-5• #omeethod+cts.oken-5• cts."ancel+-5
• !atternpublic async Task ,ooAsync(){ 9 await Some4ot:etAsync()! await Some1inRTAsync()! 9
+
public async Task ,ooAsync(CancellationTokecancellationToken){ 9 await Some4ot:etAsync(cancellationToken await Some1inRTAsync()&AsTask(cancellati
9+
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
9/24
• oderna aplikacija nije samo dr(anje U8 slobodnog za korisnički odziv. 9n
treba da radi ono što korisnik (eli u datom trenutku.
&orištenje "ancellation za poboljodziva
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
10/24
Biti pa(ljiv sa 1Async :oid2
• ; tipa za vra vra@orget2 mehanizam
• !reporuka•
&oristiti async void metode samo za top>level entry points +npr. U8 ehandlers-• +&oristiti a,ait async ask>returning metode u ostalim slučajevima-
• 8zbjegavati prosljeivanje async lambde u void>returning delegate• +3e prosljeivati async lambde u /in metode u koliko niste sigurni *C*D-
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
11/24
•
nogi problem kod async koda uzrokovani su korištenjem 1async void2 ne
8zbjegavanje 1async void2
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
12/24
&orištenje "on?gureA,ait za !e9dziv
#ynchronization"onteEt• /indo,sForms#ynchronization"onteEt +!ostG "ontrol.Begin8nvoke-• ispatcher#ynchronization"onteEt +!ostG ispatcher.Begin8nvoke-• /in#ynchronization"onteEt +!ostG "oreispatcher.unAsync-• Asp3et#ynchronization"onteEt+!ostG -
• &ako radi a,aitI
*. Jakači se na "urrent "onteEt prije a,ait7. &ad se task završi vrati se u isti "onteEt gdje je i započeo
• a,ait "on?gureA,ait+@alse-• 8sključuje vra
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
13/24
&orištenje "on?gureA,ait
Use"on?gureA,ait+@alse
async void button65Click(9){ aw ait4o1orkAsync()!+
async void button65Click(9){ 4o1orkAsync()&1ait()!+
async Task 4o1orkAsync(){ aw ait Task&Run(9)! Console&1rite;ine(
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
14/24
•
&oristiti U8 nit samo onda kada je to stvarno potrebno.
&orištenje "on?gureA,ait zaodziv i pre@rormanse
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
15/24
8zbjegavati 1#ync preko Async2' 1Async #ync2 u bibliotekama
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
16/24
Nta 1asinhrono2 stvarno znač
• #inhrono• 8zvrši nešto ovdje i odmah.• 9nda kad se izvrši' tek tad mogu kontrolisati nešto drugo.
• Asinhrono• 8nicijalizirati nešto ovdje u odmah.• ogu kontrolisati nešto drugo odmah' iako mi prethodni ko
završio.
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
17/24
public static void .ause.r Thread.ool&/ueue0ser1o
.ause.rint())!+
public static Task .ause.r return Task&Run(() =
.ause.rint())!+
public static Task .ause.r var tcs = new TaskCompletionSource.au?a na 6 sekundi a ?atim output @#ello na kon?olu&B
#ynchronous Asynchronouspublic static void .ause.rint() { var end = 4ateTime&:ow '
TimeSpan&,romSeconds(6)! while(4ateTime&:ow < end)! Console&1rite;ine(#ello)!+
public static void .ause.rint() { Task t = .ause.rintAsync()! t&1ait()!+
1syncprekoasync
2ogu
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
18/24
8zbjegavati 1#ync preko Async2' 1Apreko #ync2 u bibliotekama
• !reporuka• #u?ks izmeu ostalog poma(e korisniku da razumije impleme• &oristiti 13azivetodeAsync2 if metoda nekoristi niti.• Oak i kad se koristi 1return ask.un++- 4% 3azivetode+--52
• &oristiti 13azivetode2 if ne postoji brza async i kada treba deadlock.
• 3ede?nisati etodu sa async samo ako radiG 1FooAsync+-./ait+-52
• 8zuzetci• etode od ./in dllova +asemblia-• !reklapanja u hierarhiji klasa
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
19/24
&orištenje alata u :isual #tud
• :isual #tudio 7C*;G debugiranje Async met• #tep 8n• #tep 9ver• #tep 9ut
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
20/24
•
Ulazak u metodu čak i kad je asinhrona.
&retanja debugera kroz async m
A d b i j :i l #
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
21/24
Async debugiranje u :isual #tu7C*;
• :isual #tudio 7C*;G "all #tack /indo,• 9bezbjeuje 1call stack2 kroz sve async tačke.
• :isual #tudio 7C*;G asks /indo,• 3avigacijska lista svih aktivnih async operacija.
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
22/24
•
:a(no znati kako se došlo do neke tačke u kodu i šta se dešava pri tom.
&orištenje "all #tack i ask/indo,s sa async
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
23/24
-
8/17/2019 Async – Magična Riječ Za Uspjeh Vase Aplikacije
24/24
3e zaboravite ispunitiupitnike.Oekaju vas vrijednenagradeL