HAVIT Knowledge Base

Vývoj webových aplikací, .NET, SQL, návrh
Welcome to HAVIT Knowledge Base Sign in | Join | Help
-
Home Články Forums Obrázky Soubory

.NET Framework

Microsoft .NET Framework, Base Class Library

PDC2010: The Future of C# - Asynchronous Programming (Hejlsberg)

Přestože jsem se nakonec nemohl zúčastnit společného promítání PDC v českém Microsoftu, sleduji to alespoň z domova a dělám si zápisky bez dalšího zpracování.

...přednáší Hejlsberg.

...live vysílání bohužel těžce nestíhá, i když běží na Azure ;-)

...PowerPoint z prezentace je přiložen.

...mimochodem všichni účastníci PDC dostanou LG Windows Phone 7 telefon (tento měsíc jsem si koupil iPhone 4, svůj první iPhone, tak jim naštěstí nezávidím)

Asynchronous Programming Improvements

  • co největší přiblížení podoby kódu synchronní podobě
  • Task<T> jako návratový typ asynchronních metod (obdoba starého AsyncResult), reprezentuje probíhající operaci, vše, co s ní souvisí (stav, výsledek, výjimky, atp.)
  • klíčové slovo "async" v signatuře metody, např. async Task<string> DoSomethingAsync(int inputValue)
  • klíčové slovo "await" uvnitř async metody volá async operaci
  • volání jinak stejně, jako by šlo o synchronní kód, včetně možného zachytávání výjimky obalením try-catch blokem
  • volitelný cancelation-token argument umožňuje zrušit probíhající async operace, snadno lze implementovat timeouty
  • Composable callback model
    • var task2 = task1.ContinueWith(t => ... t.Result ...);
    • "await" vlastně není nic jiného než syntactic sugar pro extension metodu ContinueXy(...), která znamená pokračování po dokončení asynchronní operace
  • Combinators - WhenAll, WhenAny, Delay, ...
  • ukázky kódu jsou v přiloženém PPTX, namátkou:

async Task ProcessFeedAsync(string url) {
  var text = await DownloadFeedAsync(url);
  var doc = ParseFeedIntoDoc(text);
  await SaveDocAsync(doc);
  ProcessLog.WriteEntry(url);
}

async void DoWorkAsync() {
  var t1 = ProcessFeedAsync("www.acme.com/rss");
  var t2 = ProcessFeedAsync("www.xyznews.com/rss");
  await Task.WhenAll(t1, t2);
  DisplayMessage("Done");
}

nebo

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;
}

Compiler as a Service

Na konci už si hrál jenom chvilku s CaS, jak je známý už v NET4 a předváděl konvertor ze C# do  VB (Copy / Paste as Visual Basic).

Published 28. října 2010 20:38 by Robert Haken
Filed under:

Attachment(s): FT09-Hejlsberg.pptx

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

No Comments

What do you think?

(required) 
(optional)
(required) 
Enter the code you see below

Submit