SlideShare une entreprise Scribd logo
1  sur  16
Trilha: DEV




Alberto Monteiro
Email: alberto.monteiro@live.com
Twitter: @AibertoMonteiro
Blog: 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# 4.0 + VB 10.0
                                       Dynamic + Language Parity

          C# 3.0 + VB 9.0
                                 Language Integrated Query

    C# 2.0 + VB 8.0
                            Generics

C# 1.0 + VB 7.0
                       Managed Code
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
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
                             Generics

C# 1.0 + VB 7.0
                        Managed Code
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
Síncrona contra Assíncrona
var data = Baixar(...);
Processar(data);




        Baixar                Processar




BaixarAsync(... , data => {
    Processar (data);
});




         BaixarAsync             Processar
Síncrona contra Assíncrona
var data = DownloadData(...);
           Baixar(...);
Processar(data);
ProcessData(data);




      Baixar                    Processar




BaixarAsync(... , data => {
    Processar (data);
});




      Baixar                    Processar
UI Responsiva
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;
}
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;
                      });
                  }
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;
                                  }
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;
                                 }
Suporte pelo .NET
DUVIDAS?!


Alberto Monteiro
Email: alberto.monteiro@live.com
Twitter: @AibertoMonteiro
Blog: http://blog.albertomonteiro.net.br

Contenu connexe

Tendances (6)

O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9
 
Plinio Balduino: JavaScript Funcional
Plinio Balduino: JavaScript FuncionalPlinio Balduino: JavaScript Funcional
Plinio Balduino: JavaScript Funcional
 
Canivete shell
Canivete shellCanivete shell
Canivete shell
 
Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
 
Aplicações Web com AJAX - Er Galvão Abbott
Aplicações Web com AJAX - Er Galvão AbbottAplicações Web com AJAX - Er Galvão Abbott
Aplicações Web com AJAX - Er Galvão Abbott
 
Implementação em ActionScript 3 do Protocolo IRC
Implementação em ActionScript 3 do Protocolo IRCImplementação em ActionScript 3 do Protocolo IRC
Implementação em ActionScript 3 do Protocolo IRC
 

Similaire à Comtec 2012 - C# Async

PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
Sérgio Souza Costa
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NET
slides_teltools
 

Similaire à Comtec 2012 - C# Async (20)

Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
JSP - Expression Language
JSP - Expression LanguageJSP - Expression Language
JSP - Expression Language
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
React + Flux (Alt)
React + Flux (Alt)React + Flux (Alt)
React + Flux (Alt)
 
Programação web ii aulas 06 e 07
Programação web ii   aulas 06 e 07Programação web ii   aulas 06 e 07
Programação web ii aulas 06 e 07
 
Programação assíncrona com C#
Programação assíncrona com C#Programação assíncrona com C#
Programação assíncrona com C#
 
Testes em Aplicações Web com Cactus
Testes em Aplicações Web com CactusTestes em Aplicações Web com Cactus
Testes em Aplicações Web com Cactus
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
 
ODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQueryODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQuery
 
Web 2.0 e AJAX - Parte 2 / 3
Web 2.0 e AJAX - Parte 2 / 3Web 2.0 e AJAX - Parte 2 / 3
Web 2.0 e AJAX - Parte 2 / 3
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NET
 
Ajax em java
Ajax em javaAjax em java
Ajax em java
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
 
Artigoajax
ArtigoajaxArtigoajax
Artigoajax
 
JQuery
JQuery JQuery
JQuery
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EEJavaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 
Persistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomPersistência de Dados no SQLite com Room
Persistência de Dados no SQLite com Room
 
Evolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptEvolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScript
 

Plus de Alberto Monteiro (7)

SOLID Os princípios da linguagem orientada a objeto
SOLID Os princípios da linguagem orientada a objetoSOLID Os princípios da linguagem orientada a objeto
SOLID Os princípios da linguagem orientada a objeto
 
CEJS 2014 - KnockoutJS
CEJS 2014 - KnockoutJSCEJS 2014 - KnockoutJS
CEJS 2014 - KnockoutJS
 
Expressões regulares
Expressões regularesExpressões regulares
Expressões regulares
 
ASP.NET Single Page Application
ASP.NET Single Page ApplicationASP.NET Single Page Application
ASP.NET Single Page Application
 
Ce JS 23 06-2012
Ce JS 23 06-2012Ce JS 23 06-2012
Ce JS 23 06-2012
 
Live code
Live codeLive code
Live code
 
Comtec 2011
Comtec 2011Comtec 2011
Comtec 2011
 

Dernier

Dernier (8)

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 

Comtec 2012 - C# Async

  • 1. Trilha: DEV Alberto Monteiro Email: alberto.monteiro@live.com Twitter: @AibertoMonteiro Blog: http://blog.albertomonteiro.net.br
  • 3. Agenda Evoluçao Motivação Evolução atual Breve resumo Sincrono vs Assíncrono Como funciona Suporte Duvidas?!
  • 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 Generics C# 1.0 + VB 7.0 Managed Code
  • 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. 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 Generics C# 1.0 + VB 7.0 Managed Code
  • 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. Síncrona contra Assíncrona var data = Baixar(...); Processar(data); Baixar Processar BaixarAsync(... , data => { Processar (data); }); BaixarAsync Processar
  • 9. Síncrona contra Assíncrona var data = DownloadData(...); Baixar(...); Processar(data); ProcessData(data); Baixar Processar BaixarAsync(... , data => { Processar (data); }); Baixar Processar
  • 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. 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. 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. 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; }
  • 16. DUVIDAS?! Alberto Monteiro Email: alberto.monteiro@live.com Twitter: @AibertoMonteiro Blog: http://blog.albertomonteiro.net.br