Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Asynchroniczność w Windows 8 Jakub Binkowski. O mnie Jakub Binkowski 2008 - 2011 Lead.NET Developer.

Podobne prezentacje


Prezentacja na temat: "Asynchroniczność w Windows 8 Jakub Binkowski. O mnie Jakub Binkowski 2008 - 2011 Lead.NET Developer."— Zapis prezentacji:

1 Asynchroniczność w Windows 8 Jakub Binkowski

2 O mnie Jakub Binkowski Lead.NET Developer

3 Agenda Dlaczego asynchronicz- ność? Historia: APM, EAPasync i await ASP.NET MVC Windows 8 Runtime Internals i architektura

4 Dlaczego asynchroniczność?

5 public void DownloadImageAsPng(string url, string fileName) { var webclient = new WebClient(); var imageBytes = webclient.DownloadData(url); using(var imageStream = new MemoryStream(imageBytes)) { var bitmap = Bitmap.FromStream(imageStream); bitmap.Save(fileName, ImageFormat.Png); } Przykładowa metoda… Pobranie z sieci Zapis na dysk

6 Gdyby 1 cykl procesora = 1 sekunda: Rejestr: 1s Pamięć: 5-10s Dysk: 3 miesiące Sieć: 30 lat Ile to trwa?

7 Operacje obliczeniowe Wątek

8 Operacje I/O synchroniczne Operacja I/O Wątek Urządzenie

9 Różne problemy w różnych środowiskach: Aplikacje desktop (Metro, WPF, …) Aplikacje serwerowe (ASP.NET, WCF, …) Problemy

10 Jest jeden wątek UI Gdy jest zajęty aplikacja przestaje odpowiadać Aplikacje desktop

11 Oparte o pulę wątków Gdy wszystkie wątki z puli są zajęte – żądania się kolejkują Pula wątków rośnie, ale: Każdy wątek to 1MB zarezerwowanej pamięci Aplikacje serwerowe

12 Dla uproszczenia: 3 procesory 3 wątki w puli 2 rodzaje operacji: Tylko HTML – szybka operacja w pamięci Dostęp do zewnętrznych zasobów (DB, Web Service) - wole Przykład – aplikacja ASP.NET

13 HTML DB Web Service HTML CPU = 66% DB Żądania aktualnie obsługiwane Żądania aktualnie obsługiwane Kolejka żądań oczekujących Kolejka żądań oczekujących HTML

14 Przykład – aplikacja ASP.NET HTML DB Web Service HTML CPU = 33% DB HTML

15 Przykład – aplikacja ASP.NET HTML DB Web Service CPU = 0% DB HTML Żądania, które można by obsłużyć… Żądania, które można by obsłużyć…

16 Desktop zawieszenie się Server spadek wydajności Rozwiązanie – operacje asynchroniczne Problemy operacji synchronicznych

17 Operacje I/O asynchroniczne Operacja I/O Wątek 1 Urządzenie Wątek 2

18 Krótka historia asynchroniczności w.NET

19 Asynchronous Programming Model Asynchroniczność w.NET 1.1 Demo

20 Wg zespołu Windows Forms APM jest: zbyt skomplikowany nie pasuje do trybu design wymaga pilnowania wątków Asynchronous Programming Model

21 Event-base Asynchronous Programming Asynchroniczność w.NET 2.0 Demo

22 public void DownloadFile(string url) { try { var webClient = new WebClient(); var data = webClient.DownloadData(url); //carry on... } catch (Exception ex) { //handle error... } Problem APM i EAP…

23 public void DownloadFile(string url) { try { var webClient = new WebClient(); webClient.DownloadDataCompleted += DownloadFileCompleted; webClient.DownloadDataAsync(new Uri(url)); } catch (Exception ex) { //handle error } private void DownloadFileCompleted(object sender, DownloadDataCompletedEventArgs e) { if (e.Error == null) { var data = e.Result; //carry on... } else { //handle error } Problem APM i EAP…

24 Napisać taki kod jak synchroniczny Niech kompilator zajmie się asynchronicznością Niech debugger działa jak gdyby kod był synchroniczny A gdyby można było…

25 A gdyby tak można było…

26 public async void DownloadFile(string url) { try { var webClient = new WebClient(); var data = await webClient.DownloadDataTaskAsync( new Uri(url)); //carry on... } catch (Exception ex) { //handle error... } async!

27 public async Task DownloadFile(string url) { var wc = new WebClient(); var data = await wc.DownloadDataTaskAsync(/*...*/); //carry on... } Jak działa async?

28 async Demo

29 public Task DownloadFile(string url) { var wc = new WebClient(); var downloadTask = wc.DownloadDataTaskAsync(/*...*/); var continuationTask = downloadTask.ContinueWith(t => { if (t.Exception != null) throw t.Exception.InnerException; //carry on... }); return continuationTask; } Co zrobi kompilator?

30 public async void FireAndForget() { /*...*/ } public async Task FireAndRemember() { /*...*/ } public async Task FireAndReturn() { /*...*/ return 1; } Metody async

31 Fire and forget Przeznaczenie: Event handlery Kompatybilność wstecz async Task vs async void Można poczekać na zakończenie wykonania (i sprawdzić np. exception) async void Xxx()async Task Xxx()

32 Func > fireAndReturn = async ()=> { /**/ return 1; }; Anonimowy async? Czemu nie!

33 ASP.NET MVC async

34 public class HomeController : Controller { public ActionResult Download() { var client = new WebClient(); var data = client.DownloadData(new Uri("…")); //... return View(); } } ASP.NET MVC 3 – kontroler Potencjalnie długotrwała operacja

35 public class HomeController : AsyncController { public void DownloadAsync() { AsyncManager.OutstandingOperations.Increment(); var client = new WebClient(); client.DownloadDataCompleted += (s, a) => { AsyncManager.Parameters["data"] = a.Result; AsyncManager.OutstandingOperations.Decrement(); }; client.DownloadDataAsync(new Uri("…")); } public ActionResult AvatarDetailsCompleted(byte[] data) { //... return View(); } } ASP.NET MVC 3 – kontroler asynchroniczny

36 ASP.NET MVC 3 Kontroler synchroniczny Kontroler asynchroniczn y Demo

37 public class HomeController : Controller { public ActionResult Download() { var client = new WebClient(); var data = client.DownloadData(new Uri("…")); //... return View(); } } ASP.NET MVC 4 – kontroler synchroniczny (przypomnienie)

38 public class HomeController : AsyncController { public async Task Download() { var client = new WebClient(); var data = await client.DownloadDataTaskAsync(/*…*/); //... return View(); } } ASP.NET MVC 4 – kontroler asynchroniczny

39 ASP.NET MVC 4 Kontroler asynchroniczn y Demo

40 Windows Runtime async

41 Async w Windows Runtime Fundamentals Communications & Data Media Devices User Interface

42 Asynchroniczność w Windows Runtime Demo

43 Async w Windows Runtime

44 IAsync* a Task IAsyncAction IAsyncOperation Task

45 Internals, architektura

46 Na jakim wątku wykona się dalej kod? Demo

47 Czy skoro można wywołać na: Task IAsyncAction/Operation to czy można wywołać na czymś jeszcze innym? Pytanie

48 await – na czym można czekać? public class MyClass { public MyAwaiter GetAwaiter() { /*..*/ } } public class MyAwaiter : INotifyCompletion { public bool IsCompleted { get {/*...*/} } public void GetResult() {/*..*/} public void OnCompleted(Action continuation) {/*..*/} } var my = new MyClass(); await my; Może też być extension method Może też być extension method

49 Co będzie w zmiennej type? var task = Task.Run ( new Func (() => { throw new Exception(); })); try { await task; } catch (Exception ex) { string type = ex.GetType().Name; } var task = Task.Run ( new Func (() => { throw new Exception(); })); try { await task; } catch (Exception ex) { string type = ex.GetType().Name; } var task = Task.Run ( new Func (() => { throw new Exception(); })); task.ContinueWith(t => { try { var res = t.Result; } catch (Exception ex) { string type = ex.GetType().Name; } }); var task = Task.Run ( new Func (() => { throw new Exception(); })); task.ContinueWith(t => { try { var res = t.Result; } catch (Exception ex) { string type = ex.GetType().Name; } });

50 await a Exception Demo

51 private async void Button_Click_1(object sender, RoutedEventArgs e) { var wc = new WebClient(); var data = await wc.DownloadDataTaskAsync(tb.Text); //... } Czy tak piszemy aplikacje?

52 Wzorce, np. MVVM? Warstwy: logiki biznesowej, dostępu do danych? Co z tą architekturą?

53 Wpływ async na architekturę Demo

54 async – okiełznanie asynchroniczności W.NET – nowe metody W Windows Runtime – jedyny model Pełne wsparcie w ASP.NET, WCF Wpływ na architekturę Podsumowanie

55 Dziękuję za uwagę! Pytania?


Pobierz ppt "Asynchroniczność w Windows 8 Jakub Binkowski. O mnie Jakub Binkowski 2008 - 2011 Lead.NET Developer."

Podobne prezentacje


Reklamy Google