none
Matar los Threads generados en debug RRS feed

  • Pregunta

  • Hola a todos/as

    Tengo una aplicación MVC desarrollada en VS2015 y SQL Server que es multihilo. Me la dejaron a mi cargo (no la desarrollé yo) y estoy teniendo multitud de problemas con ella. Uno de ellos es que cuando la depuro, en el combo de los threads de VS se cargan infinidad de ellos y van saltando de uno a otro haciendo intrazable la aplicación. 

    Habría alguna manera de matar todos esos threads que se están ejecutando y poder depurar??

    Muchas gracias

    Saludos!

    viernes, 20 de mayo de 2016 10:38

Respuestas

  • hola

    pero no deberias tener que eliminar los thread en ejecucion porque se supone estan realizando un proceso, quizas podrias enviar una cancelacion, pero es el proceso interno el thread quien deberia detectar esto y cancelar lo que esta realizando

     Safe Cancellation

    How to: Create and Terminate Threads (C# Programming Guide)

    como veras el proceso del hilo debe contemplar la cancelacion

    lo que no queda claro que es esto de "combo de los threads"? que conozca los thread no se listan de forma visual

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 20 de mayo de 2016 12:36
  • Exacto, a eso me refería.  Es que es muy común que la gente crea que async/await son programación multihilo cuando en realidad no lo son.  Que usen o no múltiples hilos depende enteramente del SynchronizationContext, y el único tipo de proyecto que implementa un SC multihilo es aplicaciones de consola.

    Entonces como le cuento no hay forma de matarlos si son hilos que ejecutan código de la aplicación.  La aplicación está programada así y así deberá trabajarla. :-(  Personalmente no veo otra salida.


    Jose R. MCP
    Code Samples

    viernes, 20 de mayo de 2016 14:33

Todas las respuestas

  • hola

    pero no deberias tener que eliminar los thread en ejecucion porque se supone estan realizando un proceso, quizas podrias enviar una cancelacion, pero es el proceso interno el thread quien deberia detectar esto y cancelar lo que esta realizando

     Safe Cancellation

    How to: Create and Terminate Threads (C# Programming Guide)

    como veras el proceso del hilo debe contemplar la cancelacion

    lo que no queda claro que es esto de "combo de los threads"? que conozca los thread no se listan de forma visual

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 20 de mayo de 2016 12:36
  • ¿Es ASP.net MVC?  ¿O es MVC aplicado a algún otro tipo de proyecto?

    En ASP.net, hay un hilo de ejecución por cada cliente, más los que el código genere, que siendo ASP.net no debería generar ninguno pues es peligroso perder la ejecución de la tarea en medio de un reciclaje de IIS.


    Jose R. MCP
    Code Samples

    viernes, 20 de mayo de 2016 12:40
  • Hola Leandro, 

    Muchas gracias por responder. Investigo los enlaces que me has mandado a ver qué puedo hacer. En cuanto al combo de los threads, es ésto que pongo en imagen. Cuando intento depurar una página y por ejemplo pulso un botón, quiero depurar ese comportamiento del botón. Sin embargo, por el tema de los threads en ejecución, va saltando de uno a otro y no sigue la ejecución, digamos, secuencial de pulsar el botón en esa página. No se si me explico.... LA imagen del combo es ésta:

    Saludos!

    viernes, 20 de mayo de 2016 12:47
  • Hola Jose.

    Gracias por responder. Es ASP.net MVC. El cliente soy yo mismo depurando la aplicación en local y como digo, cada vez que inicio depuración, en ese combo tengo varios workers de forma que cuando le voy dando a F10, va saltando de uno a otro con una funcionalidad totalmente diferente. Como cada uno supongo que hace una tarea concreta, no sigue una depuración secuencial del código. No se si me explico...

    Acabo de contestar a Leandro con una imagen de los threads a los que me refiero por si no me he explicado bien a lo que me refiero.

    Saludos!

    viernes, 20 de mayo de 2016 12:54
  • Ok, si son hilos de ejecución que están ejecutando código para el cual usted tiene fuente, no hay nada que hacer.  Así es como está programado y así es como usted deberá trabajar.  Eliminar un hilo de esos es hacer que la aplicación opere incorrectamente.  ¿Y son realmente hilos, o es async/await?

    Jose R. MCP
    Code Samples

    viernes, 20 de mayo de 2016 13:24
  • Gracias por responder Jose.

    Pues no estoy muy familiarizado con el tema de hilos, pero si async/await significa tener en el código un método con una declaración del tipo

    Async DoJob()

    {}

    entonces son realmente hilos ya que no tengo ningún método declarado de esa forma

    Saludos!

    viernes, 20 de mayo de 2016 14:18
  • Exacto, a eso me refería.  Es que es muy común que la gente crea que async/await son programación multihilo cuando en realidad no lo son.  Que usen o no múltiples hilos depende enteramente del SynchronizationContext, y el único tipo de proyecto que implementa un SC multihilo es aplicaciones de consola.

    Entonces como le cuento no hay forma de matarlos si son hilos que ejecutan código de la aplicación.  La aplicación está programada así y así deberá trabajarla. :-(  Personalmente no veo otra salida.


    Jose R. MCP
    Code Samples

    viernes, 20 de mayo de 2016 14:33
  • Perfecto Jose, muchas gracias.

    Es que como no se a qué se refería con async/await, busqué por internet y ví la forma en la que se declaraban. Las únicas instancias de async en mi código las tengo en jquery.

    Muchísimas gracias a ambos por la ayuda.

    Saludos!

    viernes, 20 de mayo de 2016 14:50