Sto cercando di trovare le migliori pratiche per uno dei miei progetti. È una tipica applicazione WPF con un'interfaccia utente che visualizza un elenco di elementi e un servizio dati che restituisce il risultato.Async await vs GetAwaiter(). GetResult() e callback
Chiamiamo il servizio in modo asincrono in modo da non bloccare l'interfaccia utente. Abbiamo 2 opzioni di fronte a noi:
Uso Async attendere parole chiave Questo richiede segnando tutti i metodi asincroni da fare clic sul pulsante fino a livello di servizio (classe sul lato client che effettua la chiamata HTTP al server) e qualsiasi metodo in mezzo. Questo approccio funziona benissimo quindi il problema della propagazione asincrona ovunque
Usa attendente e richiamata In questo approccio il client dell'interfaccia utente chiama il livello di servizio e passa una richiamata al livello di servizio, il livello di servizio avvolge la chiamata http al server in un'attività e utilizzare GetAwaiter(). GetResult(), al termine della chiamata http richiama il callback passato dal client dell'interfaccia utente. In questo caso, nessun metodo deve essere contrassegnato come asincrono, ma non è realmente sicuro dell'uso di GetAwaiter()
Task.Run (async() => // attende la chiamata http, richiama callback) .GetAwaiter(). GetResult ();
Sto solo cercando di scoprire che è un approccio migliore e se ci sono alcuni problemi con entrambi gli approcci che avrei dovuto essere a conoscenza
Sono abbastanza sicuro che il secondo approccio può portare a serrature morte una volta ogni tanto. Lo so perché ho affrontato qualcosa di simile nello sviluppo con Windows Universal. – Felype
C'è anche la questione delle eccezioni. Conosco un'implementazione asincrona completa, alla fine si ottiene la funzione 'AggregateException', ma non ho idea di cosa succede alle eccezioni nel metodo' GetAwaiter' – Eris
@Eris Quando si attende non si ottiene un 'AggregateException'. Ottieni l'eccezione interiore. Lo stesso succede con 'GetResult'. – i3arnon