es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Si quitas la palabra clave await antes de SendEmail(checkOutData), el método CheckOut no esperará a que se complete el método SendEmail 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étodo SendEmail 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 tarea SendEmail, lo que podría llevar a resultados impredecibles. No se recomienda quitar la palabra clave await 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étodo CheckOut al llamar el método SendEmail.

Comments are closed.