SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

PPTX
PDF
Introdução ao Respect\Validation (1.0)
PDF
Criando APIs usando o micro-framework Respect
PDF
Introdução ao MongoDB em 30 slides
ODP
Palestra cbq
PDF
JasperReports
PPT
Aula 4 php
PDF
Nossa experiência com TDD
Introdução ao Respect\Validation (1.0)
Criando APIs usando o micro-framework Respect
Introdução ao MongoDB em 30 slides
Palestra cbq
JasperReports
Aula 4 php
Nossa experiência com TDD

Mais procurados (6)

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

Semelhante a Comtec 2012 - C# Async (15)

PDF
Programação assíncrona com C#
PPTX
PDC - Engenharia - Plataforma Microsoft .NET
PDF
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
PDF
Async/Await Pattern in C#
PPTX
Maratona Windows Phone 7
PDF
Apostila ajax
PPTX
Desenvolvendo com Silverlight para WP7 Mango [Update]
PDF
TDC 2011 Goiânia: Evolução da linguagem de programação C#
PDF
felipe_brum-cv
PPTX
As Novidades do CSharp 5.0
PDF
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
PDF
Curso C sharp plus Framework NET (NOTURNO)
PDF
Curso C sharp plus Framework NET (DIURNO)
PDF
TechEd 2011 Review - Evolução da linguagem de programação C#
PDF
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
Programação assíncrona com C#
PDC - Engenharia - Plataforma Microsoft .NET
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Async/Await Pattern in C#
Maratona Windows Phone 7
Apostila ajax
Desenvolvendo com Silverlight para WP7 Mango [Update]
TDC 2011 Goiânia: Evolução da linguagem de programação C#
felipe_brum-cv
As Novidades do CSharp 5.0
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
Curso C sharp plus Framework NET (NOTURNO)
Curso C sharp plus Framework NET (DIURNO)
TechEd 2011 Review - Evolução da linguagem de programação C#
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
Anúncio

Mais de Alberto Monteiro (7)

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

Último (16)

PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Arquitetura de computadores - Memórias Secundárias
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
COBITxITIL-Entenda as diferença em uso governança TI
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Arquitetura de computadores - Memórias Secundárias
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Custos e liquidação no SAP Transportation Management, TM130 Col18
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Processos na gestão de transportes, TM100 Col18
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
COBITxITIL-Entenda as diferença em uso governança TI

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