Comtec 2012 - C# Async

472 views

Published on

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

  • Be the first to like this

No Downloads
Views
Total views
472
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Comtec 2012 - C# Async

  1. 1. Trilha: DEVAlberto MonteiroEmail: alberto.monteiro@live.comTwitter: @AibertoMonteiroBlog: http://blog.albertomonteiro.net.br
  2. 2. Parceiros
  3. 3. Agenda Evoluçao Motivação Evolução atual Breve resumo Sincrono vs Assíncrono Como funciona Suporte Duvidas?!
  4. 4. Evolução C# 4.0 + VB 10.0 Dynamic + Language Parity C# 3.0 + VB 9.0 Language Integrated Query C# 2.0 + VB 8.0 GenericsC# 1.0 + VB 7.0 Managed Code
  5. 5. Motivação• Aplicações cada vez mais conectados – Mais de latência – Mais problemas de interface do usuário responsividade – Mais problemas de escalabilidade• A programação assíncrona – Se tornando a obrigatorio em resposividade, aplicativos escaláveis – Puro async APIs, por exemplo, JS e Silverlight
  6. 6. Evolução C# + VB v.Next Asynchronous Programming C# 4.0 + VB 10.0 Dynamic + Language Parity C# 3.0 + VB 9.0 Language Integrated Query C# 2.0 + VB 8.0 GenericsC# 1.0 + VB 7.0 Managed Code
  7. 7. Assíncrono resumido• Sincrono  Espera o resultado antes de retornar – string DownloadString(...);• Assincrono  Retorna imediatamente, chama• callback com resultado – void DownloadStringAsync(..., Action<string> callback);• Beneficios – UI responsiva: Libera a UI – Escalabilidade: Thread pode ser reutilizada para outras solicitações
  8. 8. Síncrona contra Assíncronavar data = Baixar(...);Processar(data); Baixar ProcessarBaixarAsync(... , data => { Processar (data);}); BaixarAsync Processar
  9. 9. Síncrona contra Assíncronavar data = DownloadData(...); Baixar(...);Processar(data);ProcessData(data); Baixar ProcessarBaixarAsync(... , data => { Processar (data);}); Baixar Processar
  10. 10. UI Responsiva
  11. 11. 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;}
  12. 12. 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;} 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; }); }
  13. 13. Como isso funciona?async Task<XElement> Task<XElement> GetRssAsync(string url) { var $builder =GetRssAsync(string url) { AsyncTaskMethodBuilder<XElement>.Create(); var client = new WebClient(); $state = 0; var var task = TaskAwaiter<string> $a1; Action $resume = delegate {client.DownloadStringTaskAsync(url); { try var text = await task; if ($state == 1) goto L1; var xml = XElement.Parse(text); var client = new WebClient(); var task = client.DownloadStringTaskAsync(url); return xml; $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; }
  14. 14. Como isso funciona?async Task<XElement> Task<XElement> GetRssAsync(string url) { var $builder =GetRssAsync(string url) { AsyncTaskMethodBuilder<XElement>.Create(); var client = new WebClient(); $state = 0; var var task = TaskAwaiter<string> $a1; Action $resume = delegate {client.DownloadStringTaskAsync(url); { try var text = await task; if ($state == 1) goto L1; var xml = XElement.Parse(text); var client = new WebClient(); var task = client.DownloadStringTaskAsync(url); return xml; $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; }
  15. 15. Suporte pelo .NET
  16. 16. DUVIDAS?!Alberto MonteiroEmail: alberto.monteiro@live.comTwitter: @AibertoMonteiroBlog: http://blog.albertomonteiro.net.br

×