Las consecuencias de no esperar
Tengo un webapi .net que tiene un código para enviar correos electrónicos.
public async Task CheckOut(CheckOutData checkOutData){
...
...
...
// ¿Cuáles son los riesgos si elimino el await?
await SendEmail(checkOutData);
...
...
}
public async Task SendEmail(CheckOutData checkOutData)
{
try{
...
...
...
}
catch (exception ex){
// Registra el error
}
}
He configurado el registro en el código SendEmail
. Mi pregunta es si puedo eliminar el await, ¿es posible que el hilo se detenga y el correo electrónico no se envíe si la ejecución se completa antes de que se complete SendEmail?
¿Estoy seguro si elimino el await? Estoy dispuesto a aceptar que se produzca una excepción que se registre.
davy.ai
Si quitas la palabra clave
await
antes deSendEmail(checkOutData)
, el métodoCheckOut
no esperará a que se complete el métodoSendEmail
antes de pasar a las siguientes instrucciones. Esto significa que es posible que se mate el hilo y el correo electrónico no se envíe si la ejecución se completa antes de que el métodoSendEmail
termine.Quitar la palabra clave
await
en este escenario resultaría en una ejecución asincrónica que ocurre sin esperar a la finalización de la tareaSendEmail
, lo que podría llevar a resultados impredecibles. No se recomienda quitar la palabra claveawait
a menos que se tenga un buen entendimiento de los posibles riesgos y las implicaciones de hacerlo.En conclusión, para asegurar que el correo electrónico sea enviado completamente sin el hilo sea interrumpido, es recomendable mantener la palabra clave
await
en el métodoCheckOut
al llamar el métodoSendEmail
.