Епизод 7
Епизод 7 на Nerds2Nerds записан на 28.06.2013 с основна тема асинхронно програмиране с yield и async/await.
Част 1 – обзор на новините
Директен линк към част 1 (mp3) (ogg)
00:50 – наши математици с 6 медала от балканската олимпиада
03:10 – Google Maps вече без облаци
05:10 – Google не искат да трият информация за потребители
15:30 – Аndroid 4.3?
15:50 – Google подготвят гейм конзола базирана на Android
16:50 – колко са космическите станции? Може би две?
18:30 – вграждат софтуер против принтирането на оръжия в 3D принтерите
20:50 – акциите на Apple паднаха под $400
23:40 – Intel имат технология, която позволява да разбират за какво си мислиш в момента
24:50 – Firefox 22 вече е налична
26:00 – Google лансират нов мрежов протокол
30:10 – Какво се случва, ако пиете Кока-Кола вместо вода
33:40 – Kinect на Xbox One няма да е съвместим с PC
38:30 – Конференцията Build
– Oracle продукти в Azure
– Новости в Azure
– Windows 8.1
– Internet Explorer 11 с WebGL и SPDY
Част 2 – Асинхронно програмиране с yield и async/await
Директен линк към част 2 (mp3) (ogg)
Синхронният код, който обсъждаме в част 2:
public static void Test() { for (int i = 0; i < 10; i++) { try { int firstCallResult = GetIntFromService(); string secondCallResult = GetStringFromService(firstCallResult); Console.WriteLine("Result: " + secondCallResult); } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } } }
Примерна асинхронна версия с callbacks:
public static void Test(int iteration) { GetIntFromServiceAsync() .ContinueWith(t => { if (t.Exception == null) { int firstCallResult = t.Result; GetStringFromServiceAsync(firstCallResult) .ContinueWith(t2 => { if (t2.Exception == null) { string secondCallResult = t2.Result; Console.WriteLine("Result: " + secondCallResult); Continue(iteration); } else { Console.WriteLine("Error: " + t.Exception.Message); Continue(iteration); } }); } else { Console.WriteLine("Error: " + t.Exception.Message); Continue(iteration); } }); } public static void Continue(int iteration) { iteration++; if (iteration < 10) { Test(iteration); } }
Асинхронна версия с async/await:
public async static Task Test() { for (int i = 0; i < 10; i++) { try { int firstCallResult = await GetIntFromServiceAsync(); string secondCallResult = await GetStringFromServiceAsync(firstCallResult); Console.WriteLine("Result: " + secondCallResult); } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } } }
Презентация за използване на yield за асинхронно програмиране:
http://channel9.msdn.com/blogs/charles/jeffrey-richter-and-his-asyncenumerator - изисква Silverlight за да се гледа в браузъра, но може да се свали файл.
Допълнителна информация за async/await - http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx
Обща информация за генераторите - http://en.wikipedia.org/wiki/Generator_(computer_programming)
| Posted in Uncategorized | 89 Comments »