comtec 2012 - c# async
Post on 27-Nov-2014
597 Views
Preview:
DESCRIPTION
TRANSCRIPT
Trilha: DEV
Programação Assíncrona com
C# 5Alberto MonteiroEmail: alberto.monteiro@live.comTwitter: @AibertoMonteiroBlog: http://blog.albertomonteiro.net.br
Parceiros
Agenda Evoluçao
Motivação
Evolução atual
Breve resumo
Sincrono vs Assíncrono
Como funciona
Suporte
Duvidas?!
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
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
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
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
Síncrona contra Assíncrona
Thread
var data = Baixar(...);Processar(data);
BaixarAsync(... , data => { Processar (data);});
Thread
BaixarAsync Processar
STOP
ProcessarBaixar
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);});
UI Responsiva
DEMO
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;}
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; });}
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;}
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;}
Suporte pelo .NET
TaskParallelLibrary
WindowsCommunicationFoundation
ReactiveExtensions(Rx)
BaseClassLibrary Outros
…
Alberto MonteiroEmail: alberto.monteiro@live.comTwitter: @AibertoMonteiroBlog: http://blog.albertomonteiro.net.br
DUVIDAS?!
top related