¿Es posible que se produzca un estado de bloqueo o congelación de la aplicación ASP.NET Core Web API?
Tengo una aplicación ASP.NET Core 3.1 Web API que tiene un servicio de host de fondo donde escribí el siguiente código para simular un bloqueo en la aplicación:
public class Worker : IHostedService
{
public Task StartAsync(CancellationToken cancellationToken)
{
var a = new object();
var b = new object();
lock (a)
{
lock (b)
{
}
}
// other thread
lock (b)
{
lock (a)
{
}
}
return Task.CompletedTask;
}
}
La aplicación se está ejecutando, pero no se bloquea ni entra en estado de suspensión, aún puedo acceder al punto final de la API web y obtener un resultado.
¿Será posible hacer que la aplicación web en ejecución se bloquee o entre en estado de suspensión para que NINGUNA de las API devuelva un resultado 200?
Gracias.
davy.ai
Sí, es posible hacer que la aplicación web en ejecución entre en estado de bloqueo o colgado modificando el código en la clase Worker de la siguiente manera:
En el código modificado, se agrega un retraso de 5 segundos después de adquirir el bloqueo en el objeto ‘a’ para simular alguna carga de trabajo. Este retraso hará que el primer bloqueo se mantenga durante un período de tiempo más largo. Mientras tanto, el otro hilo adquirirá el bloqueo en el objeto ‘b’. Pero no podrá avanzar más ya que el objeto ‘a’ ya está bloqueado. Como resultado, la aplicación entrará en estado de bloqueo.
Ahora, ninguna de las solicitudes de la API recibirá una respuesta 200 ya que la aplicación está en un estado colgado. Para recuperarse de esta situación, es posible que deba reiniciar la aplicación o realizar alguna otra intervención manual.