Sto utilizzando MvvmCross e la libreria AsyncEx all'interno di un'app di Windows 10 (UWP).codice di blocco # c in modalità asincrona
In un ViewModel, ho una proprietà INotifyTaskCompletion (1) che è collegato da dare un metodo Async nella (2)
In (2), chiamo un metodo biblioteca asincrona ViewModel cui:
- assegni una cache locale
- Download dati in modo asincrono
- aggiunge i dati nella cache
Il codice di memorizzazione nella cache non può essere reso asincrono e quindi il metodo di libreria contiene sia il blocco che il codice asincrono.
D. Qual è il modo migliore per impedire il blocco del thread dell'interfaccia utente?
Capisco da Stephen Cleary di non bloccare in codice asincrono e non utilizzare Task.Run nei metodi di libreria. Quindi devo ...
Spostare le chiamate nella cache in (2), ad es.
- Usa Task.Run (per controllare la cache)
- Chiamare il metodo di raccolta in modo asincrono
- Usa Task.Run di nuovo (per memorizzare nella cache i dati)?
C'è un modo migliore?
Hai qualche codice che potresti condividere? –
Dipende dalla tua definizione di "migliore". Se non puoi cambiare il codice della cache e vuoi usare async/await, allora usare 'Task.Run()' per il codice di caching è "corretto". – Jcl