Comtec 2012 - C# Async
-
Upload
alberto-monteiro -
Category
Technology
-
view
599 -
download
1
description
Transcript of Comtec 2012 - C# Async
![Page 1: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/1.jpg)
Trilha: DEV
Programação Assíncrona com
C# 5Alberto MonteiroEmail: [email protected]: @AibertoMonteiroBlog: http://blog.albertomonteiro.net.br
![Page 2: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/2.jpg)
Parceiros
![Page 3: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/3.jpg)
Agenda Evoluçao
Motivação
Evolução atual
Breve resumo
Sincrono vs Assíncrono
Como funciona
Suporte
Duvidas?!
![Page 4: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/4.jpg)
Evolução
C# 1.0 + VB 7.0Managed Code
C# 2.0 + VB 8.0Generics
C# 3.0 + VB 9.0Language Integrated Query
C# 4.0 + VB 10.0Dynamic + Language Parity
![Page 5: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/5.jpg)
Motivação
Aplicações cada vez mais conectadosMais de latênciaMais problemas de interface do usuário responsividadeMais problemas de escalabilidade
A programação assíncronaSe tornando a obrigatorio em resposividade, aplicativos escaláveisPuro async APIs, por exemplo, JS e Silverlight
![Page 6: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/6.jpg)
Evolução
Managed Code
Generics
Language Integrated Query
Dynamic + Language Parity
C# + VB v.NextAsynchronous Programming
C# 1.0 + VB 7.0
C# 2.0 + VB 8.0
C# 3.0 + VB 9.0
C# 4.0 + VB 10.0
![Page 7: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/7.jpg)
Assíncrono resumido
Sincrono Espera o resultado antes de retornarstring DownloadString(...);
Assincrono Retorna imediatamente, chama callback com resultado
void DownloadStringAsync(..., Action<string> callback);
BeneficiosUI responsiva: Libera a UIEscalabilidade: Thread pode ser reutilizada para outras solicitações
![Page 8: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/8.jpg)
Síncrona contra Assíncrona
Thread
var data = Baixar(...);Processar(data);
BaixarAsync(... , data => { Processar (data);});
Thread
BaixarAsync Processar
STOP
ProcessarBaixar
![Page 9: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/9.jpg)
Síncrona contra Assíncrona
Thread
var data = DownloadData(...);ProcessData(data);
Thread
BaixarAsync Processar
STOP
ProcessarBaixar
STOP
var data = Baixar(...);Processar(data);
BaixarAsync(... , data => { Processar (data);});
![Page 10: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/10.jpg)
UI Responsiva
DEMO
![Page 11: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/11.jpg)
Como isso funciona?
async Task<XElement> GetRssAsync(string url) { var client = new WebClient(); var task = client.DownloadStringTaskAsync(url); var text = await task; var xml = XElement.Parse(text); return xml;}
![Page 12: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/12.jpg)
async Task<XElement> GetRssAsync(string url) { var client = new WebClient(); var task = client.DownloadStringTaskAsync(url); var text = await task; var xml = XElement.Parse(text); return xml;}
Como isso funciona?
Task<XElement> GetRssAsync(string url) { var client = new WebClient(); var task = client.DownloadStringTaskAsync(url); return task.ContinueWith(delegate { var text = task.Result; var xml = XElement.Parse(text); return xml; });}
![Page 13: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/13.jpg)
async Task<XElement> GetRssAsync(string url) { var client = new WebClient(); var task = client.DownloadStringTaskAsync(url); var text = await task; var xml = XElement.Parse(text); return xml;}
Como isso funciona?
Task<XElement> GetRssAsync(string url) { var $builder = AsyncTaskMethodBuilder<XElement>.Create(); var $state = 0; TaskAwaiter<string> $a1; Action $resume = delegate { try { if ($state == 1) goto L1; var client = new WebClient(); var task = client.DownloadStringTaskAsync(url); $a1 = task.GetAwaiter(); if ($a1.IsCompleted) goto L1; $state = 1; $a1.OnCompleted($resume); return; L1: var text = $a1.GetResult(); var xml = XElement.Parse(text); $builder.SetResult(xml); } catch (Exception $ex) { $builder.SetException($ex); } }; $resume(); return $builder.Task;}
![Page 14: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/14.jpg)
async Task<XElement> GetRssAsync(string url) { var client = new WebClient(); var task = client.DownloadStringTaskAsync(url); var text = await task; var xml = XElement.Parse(text); return xml;}
Como isso funciona?
Task<XElement> GetRssAsync(string url) { var $builder = AsyncTaskMethodBuilder<XElement>.Create(); var $state = 0; TaskAwaiter<string> $a1; Action $resume = delegate { try { if ($state == 1) goto L1; var client = new WebClient(); var task = client.DownloadStringTaskAsync(url); $a1 = task.GetAwaiter(); if ($a1.IsCompleted) goto L1; $state = 1; $a1.OnCompleted($resume); return; L1: var text = $a1.GetResult(); var xml = XElement.Parse(text); $builder.SetResult(xml); } catch (Exception $ex) { $builder.SetException($ex); } }; $resume(); return $builder.Task;}
![Page 15: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/15.jpg)
Suporte pelo .NET
TaskParallelLibrary
WindowsCommunicationFoundation
ReactiveExtensions(Rx)
BaseClassLibrary Outros
…
![Page 16: Comtec 2012 - C# Async](https://reader033.fdocumentos.tips/reader033/viewer/2022061200/54774f1ab4af9f350e8b457b/html5/thumbnails/16.jpg)
Alberto MonteiroEmail: [email protected]: @AibertoMonteiroBlog: http://blog.albertomonteiro.net.br
DUVIDAS?!