Używam biblioteki MvvmCross i AsyncEx w aplikacji Windows 10 (UWP).kod blokujący w asynchronicznej metodzie
W ViewModel, że mają właściwość INotifyTaskCompletion (1), który jest przewodowo do metody Async w (2)
w punkcie (2), to wywołać metodę biblioteki Async ViewModel których:
- Sprawdza lokalnej pamięci podręcznej
- pobrania dane asynchronicznie
- Dodaje dane do pamięci podręcznej
Kod pamięci podręcznej nie może być wykonany asynchronicznie, dlatego metoda biblioteczna zawiera kod blokujący i kod asynchroniczny.
P. Jaki jest najlepszy sposób, aby zapobiec blokowaniu wątku interfejsu użytkownika?
Rozumiem, że od Stephen Cleary nie należy blokować kodu asynchronicznego i nie należy używać Task.Run w metodach bibliotecznych. Więc muszę ....
Przenoszenie wywołań buforowania do (2), np.
- Zastosowanie Task.Run (w celu sprawdzenia cache)
- wywołać metodę biblioteka asynchronicznie
- Zastosowanie Task.Run ponownie (do buforowania danych)?
Czy istnieje lepszy sposób?
Czy masz kod, którym mógłbyś się podzielić? –
Zależy od twojej definicji "lepszego". Jeśli nie możesz zmienić kodu pamięci podręcznej i chcesz użyć async/await, to użycie 'Task.Run()' dla kodu buforującego jest "poprawne". – Jcl