Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałRafał Angowski Został zmieniony 9 lat temu
1
Responsywne aplikacje w Windows 8 i.NET 4.5 Jakub Binkowski
2
O mnie Jakub Binkowski 2008 - 2011 Lead.NET Developer
3
Agenda User Experienceasync Windows 8 Runtime Internals i architektura
4
Responsywność
5
User Experience! Dlaczego responsywność?
6
Projekt UI vs projekt UX
8
Dlaczego UX ma znaczenie?
9
Cechy responsywnej aplikacji 1. Aplikacja nie zawiesza się 2. Natychmiastowa odpowiedź 3. Postęp pracy / czas do zakończenia / „kręciołek” 4. Możliwość przerwania pracy
10
Dlaczego aplikacje się zawieszają? Demo
11
public void LoadGroups() { var client = new DataServiceClient(); var groups = client.GetGroups(); foreach (var group in groups) { this.Groups.Add(new GroupViewModel(group)); } Wywołanie synchroniczne
12
Operacja I/O Wątek UI Urządzenie
13
Przed i z async Demo
14
public async Task LoadGroupsAsync() { var client = new DataServiceClient(); var groups = await client.GetGroupsAsync(); foreach (var group in groups) { this.Groups.Add(new GroupViewModel(group)); } Jak działa async (w aplikacjach UI)?
15
Operacje asynchroniczne (w aplikacjach UI) Operacja I/O Wątek UI Urządzenie Dotknięcie ekranuKliknięcie przycisku To jest aplikacja jednowątkowa!
16
Kolejne kroki do responsywności Demo
17
Async – więcej szczegółów
18
Operacje asynchroniczne (w aplikacjach UI) - przypomnienie Operacja I/O Wątek UI Urządzenie
19
public async Task LoadGroupsAsync() { var client = new DataServiceClient(); var groups = await client.GetGroupsAsync(); foreach (var group in groups) { Groups.Add(group); } Jak działa async (w aplikacjach serwerowych)?
20
Operacje asynchroniczne (w aplikacjach serwerowych) Operacja I/O Wątek 1 Urządzenie Wątek 2 Wiele wątków ≠ wielowątkowość!
21
public Task LoadGroupsAsync() { var client = new DataServiceClient(); var getGroupsTask = client.GetGroupsAsync(); getGroupsTask.ContinueWith(t => { var groups = t.Result; foreach (var group in groups) { Groups.Add(new GroupViewModel(group)); } }, TaskScheduler.FromCurrentSynchronizationContext()); return getGroupsTask; } Co zrobi kompilator?
22
public async void FireAndForget() { /*...*/ } public async Task FireAndRemember() { /*...*/ } public async Task FireAndReturn() { /*...*/ return 1; } Metody async
23
„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()
24
Func > fireAndReturn = async ()=> { /**/ return 1; }; Anonimowy async? Czemu nie!
25
Windows Runtime async
26
Async w Windows Runtime Fundamentals Communications & Data Media Devices User Interface
27
Asynchroniczność w Windows Runtime Demo
28
Async w Windows Runtime
29
IAsync* a Task IAsyncAction IAsyncOperation Task
30
Internals, architektura
31
Na jakim wątku wykona się dalej kod? Demo
32
Czy skoro można wywołać na: Task IAsyncAction/Operation to czy można wywołać na czymś jeszcze innym? Pytanie
33
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
34
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; } });
35
await a Exception Demo
36
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?
37
Wzorce, np. MVVM? Warstwy: logiki biznesowej, dostępu do danych? Co z tą architekturą?
38
Wpływ async na architekturę Demo
39
async – okiełznanie asynchroniczności W.NET – nowe metody W Windows Runtime – jedyny model Wpływ na architekturę Podsumowanie
40
Dziękuję za uwagę! Pytania?
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.