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

Mais procurados

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
Nando Vieira
 
Plinio Balduino: JavaScript Funcional
Plinio Balduino: JavaScript FuncionalPlinio Balduino: JavaScript Funcional
Plinio Balduino: JavaScript Funcional
iMasters
 
Canivete shell
Canivete shellCanivete shell
Canivete shell
Carlos Eduardo
 
Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
Guilherme Blanco
 
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
Tchelinux
 
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
José Travado
 

Mais procurados (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
 

Semelhante a Comtec 2012 - C# Async

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
Michel Ribeiro
 
JSP - Expression Language
JSP - Expression LanguageJSP - Expression Language
JSP - Expression Language
Antonio Passos
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
tdc-globalcode
 
React + Flux (Alt)
React + Flux (Alt)React + Flux (Alt)
React + Flux (Alt)
Cezar Luiz
 
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
Yuri Bispo
 
Programação assíncrona com C#
Programação assíncrona com C#Programação assíncrona com C#
Programação assíncrona com C#
Giovanni Bassi
 
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
Denis L Presciliano
 
PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX PHP: Linguagem + Mysql + MVC + AJAX
PHP: Linguagem + Mysql + MVC + AJAX
Sérgio Souza Costa
 
ODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQueryODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQuery
Marketing Digital ODIG
 
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
David Ruiz
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NET
slides_teltools
 
Ajax em java
Ajax em javaAjax em java
Ajax em java
Maurício Linhares
 
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)
Willian Magalhães
 
Artigoajax
ArtigoajaxArtigoajax
Artigoajax
MoisesInacio
 
JQuery
JQuery JQuery
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
Gabriel Moura
 
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
Loiane Groner
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
Adler Medrado
 
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
Nelson Glauber Leal
 
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
Jean Carlo Emer
 

Semelhante a 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
 

Mais de Alberto Monteiro

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
Alberto Monteiro
 
CEJS 2014 - KnockoutJS
CEJS 2014 - KnockoutJSCEJS 2014 - KnockoutJS
CEJS 2014 - KnockoutJS
Alberto Monteiro
 
Expressões regulares
Expressões regularesExpressões regulares
Expressões regulares
Alberto Monteiro
 
ASP.NET Single Page Application
ASP.NET Single Page ApplicationASP.NET Single Page Application
ASP.NET Single Page Application
Alberto Monteiro
 
Ce JS 23 06-2012
Ce JS 23 06-2012Ce JS 23 06-2012
Ce JS 23 06-2012
Alberto Monteiro
 
Live code
Live codeLive code
Live code
Alberto Monteiro
 
Comtec 2011
Comtec 2011Comtec 2011
Comtec 2011
Alberto Monteiro
 

Mais 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
 

Último

Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 

Último (8)

Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.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