Supponiamo di avere una libreria di servizio con un metodo come questoReturn Task o attendono e ConfigureAwait (false)
public async Task<Person> GetPersonAsync(Guid id) {
return await GetFromDbAsync<Person>(id);
}
Seguendo le migliori pratiche per la SynchronizationContext è meglio usare
public async Task<Person> GetPersonAsync(Guid id) {
return await GetFromDbAsync<Person>(id).ConfigureAwait(false);
}
Ma quando hai una sola operazione (credo) è meglio restituire direttamente l'attività. Vedere At the end of an async method, should I return or await?
public Task<Person> GetPersonAsync(Guid id) {
return GetFromDbAsync<Person>(id);
}
In quest'ultimo caso non è possibile utilizzare ConfigureAwait (false) perché il metodo non è atteso.
Qual è la soluzione migliore (e perché)?
Penso che l'ultima (delega) sia la più chiara e non implichi la creazione di una macchina di stato aggiuntiva. A meno che tu non stia facendo * qualcos'altro * all'interno del metodo che dipende dal risultato della chiamata asincrona, non vedo alcun motivo nell'usare 'await'. –
L'ultimo ha più senso per me. Restituisce un'attività che puoi attendere da ovunque chiami GetPersonAsync –
Quindi la soluzione che restituisce direttamente l'attività non acquisisce SynchronizationContext? – sevenmy