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).