Comtec 2012 - C# Async
Upcoming SlideShare
Loading in...5
×
 

Comtec 2012 - C# Async

on

  • 547 views

 

Statistics

Views

Total Views
547
Views on SlideShare
544
Embed Views
3

Actions

Likes
0
Downloads
4
Comments
0

1 Embed 3

http://www.linkedin.com 3

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Comtec 2012 - C# Async Comtec 2012 - C# Async Presentation Transcript

  • Trilha: DEVAlberto 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# 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
  • 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 GenericsC# 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íncronavar data = Baixar(...);Processar(data); Baixar ProcessarBaixarAsync(... , data => { Processar (data);}); BaixarAsync Processar
  • Síncrona contra Assíncronavar data = DownloadData(...); Baixar(...);Processar(data);ProcessData(data); Baixar ProcessarBaixarAsync(... , 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 MonteiroEmail: alberto.monteiro@live.comTwitter: @AibertoMonteiroBlog: http://blog.albertomonteiro.net.br