0
Async/Await make it simple!!         Massimo Bonanni       http://codetailor.blogspot.com    massimo.bonanni@domusdotnet.o...
Agenda   Cos’è e cosa non è «Asincrono»   L’asincrono prima di Async/Await   Cosa sono Async e Await   Cosa fanno Asyn...
Cos’è «Asincrono»«Il lavoro di un cameriereconsiste nell’attendere ad untavolo finché il cliente non haterminato il pasto!...
Cosè “Asincrono”Pensiamo al cameriere come un thread, e il tavolocome un metodo da eseguire.In un approccio tradizionale, ...
Asincrono vs Sincrono: perchè e come!    asincrono [a-sìn-cro-no] agg.«dispositivo che opera senza un riferimentotemporale...
Cosa non è «Asincrono»Asincrono non significa «eseguito inbackground»!!Eseguire un’operazione in background èuna delle pos...
Asincrono vs Sincrono: perchè ecome!Un approccio asincrono garantisce che lenostre interfacce grafiche siano:• Responsive•...
DEMONumeri primi non «Fluid»
L’asincrono prima di Async/AwaitIl framework .NET, prima dell’introduzionedella TPL, prevedeva due modalità diimplementazi...
Asynchronous Programming ModelAPM si basa sul design patternIAsyncResult e prevede che le operazioniasincrone siano indivi...
Asynchronous Programming ModelPer utilizzare questo tipo di chiamate asincronesono necessari i seguenti step: 1. il chiama...
Event-based AsynchronousPatternLe operazioni asincrone sono rappresentate da unacoppia Metodo/Evento.Il metodo è identific...
Event-based AsynchronousPatternEAP è stato introdotto con la versione 2.0 delframework .NET.I passi eseguiti dal chiamante...
DEMONumeri primi in EAP
Cosa sono Async/AwaitVantaggi di Async/Await:1. Permette di scrivere codice asincrono con   una struttura che sembra quell...
Cosa sono Async/AwaitLa parola chiave Async indica alcompilatore che un metodo (sia essoclassico che una lamdba expression...
Cosa sono Async/AwaitLa parola chiave Await indica al compilatoreche il metodo a cui fa riferimento deve essereinvocato in...
Async/Await e i TaskLa classe Task è uno strumento con cuiimplementare metodi «awaitabili» (l’altro èl’interfaccia IAsyncO...
Async/Await e i TaskEsempio: metodo DownloadStringTaskAsyncdella classe WebClientUn metodo che restituisce un Task è defin...
Cosa fanno Async/AwaitMyForm         Premere
La «magia» del compilatoreIl compilatore, grazie alle parole chiaveAsync e Await, è in grado di:• Gestire tutti i task eve...
La «magia» del compilatoreIl compilatore, dietro le quinte, crea unamacchina a stati i cui stati sono i possibiliflussi tr...
Async/Await e i threadL’uso di Async/Await può generare o menola creazione di nuovi thread.Un metodo Async «gira» nel«sync...
DEMONumeri primi in Async/Await
Annullare l’esecuzione di un AsyncIn alcuni casi può essere necessarioannullare una operazione Async.Poiché alla base del ...
DEMONumeri primi in Async/Await - Cancellation
Progress di un AsyncSe vogliamo supportare l’aggiornamentodell’interfaccia grafica, possiamo utilizzarel’interfaccia IProg...
DEMONumeri primi in Async/Await - Progress
Riutilizzare vecchio codiceSe abbiamo del codice «legacy» che dobbiamorapidamente riutilizzare in ottica Async,possiamo fa...
Riutilizzare vecchio codiceSe possibile è meglio ristrutturare il codice«legacy» utilizzando internamente metodi«Awaitable...
Async/Await e Windows StoreAppsTutte le operazioni che, potenzialmente,possono durare più di 50ms, sonoasincrone!Il framew...
Async/Await e .NET framework 4.0Possiamo utilizzare il pattern Async/Await anche conil framework 4.0 utilizzando l’Async T...
Q&ASe avete domande non fatele in asincrono..... fatele ora!!!
Grazie agli sponsor
RiferimentiAsync Targeting Pack per VS2012http://www.microsoft.com/en-us/download/details.aspx?id=29576Asynchronous Progra...
Upcoming SlideShare
Loading in...5
×

Async/Await: make it simple!!

939

Published on

Sessione "Async/Await: make it simple!!!" tenuta da Massimo Bonanni durante l'evento Win8@Work di DomusDotNet

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
939
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
11
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Transcript of "Async/Await: make it simple!!"

  1. 1. Async/Await make it simple!! Massimo Bonanni http://codetailor.blogspot.com massimo.bonanni@domusdotnet.org @massimobonanni
  2. 2. Agenda Cos’è e cosa non è «Asincrono» L’asincrono prima di Async/Await Cosa sono Async e Await Cosa fanno Async/Await La «magia» del compilatore Async/Await ed i thread Cancellation e Progress in Async/Await Riutilizzare vecchio codice Async/Await e Windows Store Apps Async/Await e il framework 4.0
  3. 3. Cos’è «Asincrono»«Il lavoro di un cameriereconsiste nell’attendere ad untavolo finché il cliente non haterminato il pasto! Se vuoiservire due tavoli, hai bisognodi due camerieri!»«Non hai bisogno di due camerieri! Un unicocameriere può facilmente servire due tavolicontemporaneamente, semplicementepassando da uno all’altro»
  4. 4. Cosè “Asincrono”Pensiamo al cameriere come un thread, e il tavolocome un metodo da eseguire.In un approccio tradizionale, per eseguire duecompiti contemporaneamente (ad esempio,mantenere linterfaccia utente sensibile durante ildownload di un file), si sarebbero utilizzati duethread.Creare thread è inefficiente (assumere camerierinoleggio) e si deve combattere parecchio peraggiornare le UI dal thread in background (fare inmodo che i camerieri non siano in conflitto).
  5. 5. Asincrono vs Sincrono: perchè e come! asincrono [a-sìn-cro-no] agg.«dispositivo che opera senza un riferimentotemporale di sincronizzazione rispetto a unaltro dispositivo» ↓ «non [a] nello stesso tempo»
  6. 6. Cosa non è «Asincrono»Asincrono non significa «eseguito inbackground»!!Eseguire un’operazione in background èuna delle possibili implementazioni diasincrono, non l’unica e, a volte, neanche lamigliore
  7. 7. Asincrono vs Sincrono: perchè ecome!Un approccio asincrono garantisce che lenostre interfacce grafiche siano:• Responsive• Non bloccate da logiche di accesso ai dati (sia per dati locali che remoti)
  8. 8. DEMONumeri primi non «Fluid»
  9. 9. L’asincrono prima di Async/AwaitIl framework .NET, prima dell’introduzionedella TPL, prevedeva due modalità diimplementazione del pattern asincrono:• Asynchronous Programming Model (APM)• Event-based Asynchronous Pattern (EAP)
  10. 10. Asynchronous Programming ModelAPM si basa sul design patternIAsyncResult e prevede che le operazioniasincrone siano individuate da una coppia dimetodi caratterizzati dai prefissi Begin/End.Un esempio è dato dalla classe FileStreamcon i suoi metodi BeginRead e EndRead.
  11. 11. Asynchronous Programming ModelPer utilizzare questo tipo di chiamate asincronesono necessari i seguenti step: 1. il chiamante invoca il metodo Begin passando una funzione di callback; 2. l’esecuzione dell’operazione asincrona avviene in un thread separato; 3. al termine dell’operazione è richiamata la callback passata dal chiamante; 4. il chiamante conclude l’operazione asincrona invocando il metodo End (che restituisce i dati di ritorno del metodo).
  12. 12. Event-based AsynchronousPatternLe operazioni asincrone sono rappresentate da unacoppia Metodo/Evento.Il metodo è identificato dal suffisso Async mentrel’evento dal suffisso Completed.Nell’argomento dell’evento sono, generalmente,riportati i risultati dell’operazione.Un esempio presente nel framework .NET è ilmetodo DownloadStringAsync (e il corrispettivoevento DownloadStringCompleted) della classeWebClient
  13. 13. Event-based AsynchronousPatternEAP è stato introdotto con la versione 2.0 delframework .NET.I passi eseguiti dal chiamante sono:1. il chiamante si sottoscrive all’evento di completamento dell’operazione (Completed);2. il chiamante esegue il metodo Async;3. il metodo esegue l’operazione in un thread separato;4. al termine dell’operazione viene sollevato l’evento Completed e il chiamante viene avvertito del completamento.
  14. 14. DEMONumeri primi in EAP
  15. 15. Cosa sono Async/AwaitVantaggi di Async/Await:1. Permette di scrivere codice asincrono con una struttura che sembra quella di un codice sincrono;2. In caso di aggiornamenti dell’interfaccia non è necessario utilizzare un SynchronizationContext;3. La gestione delle eccezioni avviene in maniera del tutto analoga ad un codice sincrono.
  16. 16. Cosa sono Async/AwaitLa parola chiave Async indica alcompilatore che un metodo (sia essoclassico che una lamdba expression) èasicrono e che, quindi, al suo internopossono trovare posto dei punti di“sospensione” identificati dalla parolachiave Await.
  17. 17. Cosa sono Async/AwaitLa parola chiave Await indica al compilatoreche il metodo a cui fa riferimento deve essereinvocato in maniera asincrona, inserendo una“sospensione” nel flusso di esecuzione, perriprendere dal metodo successivo nel momentoin cui tale metodo asincrono è terminato.Nel frattempo, controllo viene restituito alchiamante del metodo asincrono garantendoche questo non sia bloccato.
  18. 18. Async/Await e i TaskLa classe Task è uno strumento con cuiimplementare metodi «awaitabili» (l’altro èl’interfaccia IAsyncOperation)La parola chiave Await davanti ad una funzione cheritorna un Task, ne cambia «magicamente» il valoredi ritorno (e il comportamento):
  19. 19. Async/Await e i TaskEsempio: metodo DownloadStringTaskAsyncdella classe WebClientUn metodo che restituisce un Task è definito«Awaitable» e può essere usato in manieraasincrona anteponendo Await:
  20. 20. Cosa fanno Async/AwaitMyForm Premere
  21. 21. La «magia» del compilatoreIl compilatore, grazie alle parole chiaveAsync e Await, è in grado di:• Gestire tutti i task eventualmente creati all’interno di un metodo «Awaitable»;• Gestire la macchina a stati per il corretto richiamo degli stessi.
  22. 22. La «magia» del compilatoreIl compilatore, dietro le quinte, crea unamacchina a stati i cui stati sono i possibiliflussi tra i diversi metodi «Awaitabili»richiamati.Per ogni metodo Async, viene creata unastruttura che implementa l’interfacciaIAsyncStateMachine deputata alla gestionedella macchina a stati.
  23. 23. Async/Await e i threadL’uso di Async/Await può generare o menola creazione di nuovi thread.Un metodo Async «gira» nel«synchronization context» corrente.Solo nel caso di Task.Run avremo l’effettivacreazione di un thread separato(sincronizzato dal compilatore).
  24. 24. DEMONumeri primi in Async/Await
  25. 25. Annullare l’esecuzione di un AsyncIn alcuni casi può essere necessarioannullare una operazione Async.Poiché alla base del paradigma Async/Awaitc’è il Task, possiamo ricorrere alCancellationToken per annullareun’operazione asincrona esattamente comefaremo per un Task.
  26. 26. DEMONumeri primi in Async/Await - Cancellation
  27. 27. Progress di un AsyncSe vogliamo supportare l’aggiornamentodell’interfaccia grafica, possiamo utilizzarel’interfaccia IProgress(Of T).E’ sufficiente prevedere un parametro di tipoIProgress(Of T) con T il tipo da comunicarealla UI per l’aggiornamento.
  28. 28. DEMONumeri primi in Async/Await - Progress
  29. 29. Riutilizzare vecchio codiceSe abbiamo del codice «legacy» che dobbiamorapidamente riutilizzare in ottica Async,possiamo far leva sulla classe Task: Public Function LegacyMethod(i As Integer) As Integer . . End Function Public Function LegacyMethodAsync(i As Integer) As Task(Of Integer) Dim task = Task.Run(Function() LegacyMethod(i)) Return task End Function
  30. 30. Riutilizzare vecchio codiceSe possibile è meglio ristrutturare il codice«legacy» utilizzando internamente metodi«Awaitable» forniti dal framework anzichéusare il Task a tappeto.Se si utilizza, ad esempio, il metodoDownloadString della classe WebClient, èmeglio sostituirlo con il metodoDownloadStringTaskAsync piuttosto cheincapsulare tutto il nostro metodo in un task.
  31. 31. Async/Await e Windows StoreAppsTutte le operazioni che, potenzialmente,possono durare più di 50ms, sonoasincrone!Il framework per le Windows Store Appsespone, per queste operazioni, solo edesclusivamente i metodi Async!Ragionate nello stesso modo per le vostreapplicazioni (senza esagerare)!
  32. 32. Async/Await e .NET framework 4.0Possiamo utilizzare il pattern Async/Await anche conil framework 4.0 utilizzando l’Async Targetting Pack.Il pack permette di usare Await in VS2012 con leseguenti versioni di progetto:• .NET Framework 4.0 (con KB2468871)• Silverlight 4 e 5• Windows Phone 7.5• Portable Class Libraries per le precedenti piattaforme
  33. 33. Q&ASe avete domande non fatele in asincrono..... fatele ora!!!
  34. 34. Grazie agli sponsor
  35. 35. RiferimentiAsync Targeting Pack per VS2012http://www.microsoft.com/en-us/download/details.aspx?id=29576Asynchronous Programming with Async andAwait (C# and Visual Basic)http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspxAsynchronous programming (Windows Storeapps)http://msdn.microsoft.com/en-us/library/windows/apps/hh464924.aspxBase Class Library (BCL) Bloghttp://blogs.msdn.com/b/bclteam/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×