Async – Magična Riječ Za Uspjeh Vase Aplikacije

download Async – Magična Riječ Za Uspjeh Vase Aplikacije

of 24

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