Mentre lavoravo su un progetto ereditato, ho notato che gli sviluppatori originali hanno creato molte funzioni asincrone che mai sembrano per trarre vantaggio dall'essere, beh, asincrono . Ad esempio:
// The async method
private async Type myFuncAsync() { .. gets something from DB .. }
// Example of how the method is consistently utilized
public async Type seaHorses() {
var seaPony = await myFuncAsync();
.. do stuff ..
}
Da quanto ho capito, questo è inutile perché se stai chiamando immediatamente await
quando spari un metodo async
, allora stai solo scrivendo codice sincrono. Non sarebbe diverso da scrivere:
// The sync method
private Type myFunc() { .. gets something from DB .. }
// Example of how the method is consistently utilized
public Type seaHorses() {
var seaPony = myFunc();
.. do stuff ..
}
Considerando ciò che mi aspetto un uso efficiente di un metodo async
come:
// The async method
private async Type myFuncAsync() { .. gets something from DB .. }
// Example of how the method is consistently utilized
public async Type seaHorses() {
var loveSeaHorses = myFuncAsync();
.. do stuff ..
await loveSeaHorses;
}
Questa supposizione è corretta? C'è qualche motivo a favore o contro l'aver definito metodi come async
che hanno sempre chiamato% co_de immediatamente?
Nota: da qualche ricerca, ho una vaga comprensione che chiamare immediatamente await
significa che il thread principale continua l'esecuzione. Nell'esempio sopra, significa che il lavoro verrà eseguito sul thread principale per ciò che viene dopo await
finché non viene eseguito seaHorses()
all'interno di myFuncAsync()
. Il che mi porta a sottolineare il seguente scenario e a chiedere se si tratta di un utilizzo improprio della programmazione asincrona :
// The async method
private async Type myFuncAsync() { .. gets something from DB .. }
// Example of how the method is consistently utilized
public async Type seaHorses() {
var seaPony = await myFuncAsync();
.. do stuff ..
}
// Main Thread
Program {
.. do stuff ..
var waterHorses = await seaHorses();
.. do stuff..
}