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.

¿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.

Tags:  , ,

Answer

  1. Avatar for 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:

    public class Worker : IHostedService
    {
        public Task StartAsync(CancellationToken cancellationToken)
        {
            var a = new object();
            var b = new object();
    
            lock (a)
            {
                Task.Delay(5000).Wait(); // Agrega un retraso para simular carga de trabajo
                lock (b)
                {
                }
            }
    
            // otro hilo
            lock (b)
            {
                lock (a)
                {
                }
            }
    
            return Task.CompletedTask;
        }
    }
    

    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.

Comments are closed.