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.

¿Puedes llamar a código asíncrono dentro de un método síncrono y no esperar a que se complete? Note: It’s important to mention that a direct translation of the phrase may not be commonly used in Spanish, as it slightly contradicts the nature of asynchronous and synchronous methods. However, the translated sentence conveys the same meaning in context.

Por favor, considera el siguiente escenario en un sitio web MVC:

public JsonResult DoSomething()
{
    var result = PerformActionOne();
    _loggerService.LogActionAsync();

    return Json(new { Success = result });
}

La idea es realizar una acción y registrar que la acción ocurrió. Sin embargo, el registro llama a una API de terceros y, independientemente de si se registró la acción, quiero que el código siga ejecutándose y devuelva el resultado. Por lo tanto, no me importa esperar a que se complete la acción de registro, simplemente quiero llamarla y olvidarla.

Pregunta:

¿Este enfoque puede generar un bloqueo o algún otro tipo de problema, o simplemente se considera una mala práctica y por qué? ¿Difiere entre MVC5 y .NET 5?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Este enfoque puede potencialmente llevar a un bloqueo si el método LogActionAsync no está configurado correctamente para ejecutarse de forma asíncrona. En la implementación actual, el método se espera pero no se espera correctamente, lo que significa que JsonResult podría devolver antes de que se haya completado la acción de registro. Esto puede causar que un hilo se bloquee, lo que lleva a un bloqueo.

    En general, se considera una mala práctica disparar y olvidar métodos asíncronos sin ningún manejo de errores o monitoreo, ya que puede llevar a comportamientos inesperados y excepciones potencialmente no capturadas. Es importante asegurarse de que todos los métodos asíncronos se esperen correctamente, o que estén configurados correctamente para ejecutarse en segundo plano si no es necesario bloquear el hilo actual.

    El comportamiento de este enfoque no debería diferir significativamente entre MVC5 y .NET 5, ya que ambos frameworks admiten async-await y ejecución de tareas en segundo plano. Sin embargo, se han realizado algunas mejoras en .NET 5 para hacer que la programación asíncrona sea más eficiente y fluida, como la introducción del tipo ValueTask y un mejor soporte para tipos de valor.

Comments are closed.