none
Controlar cuando termina una consulta diferida RRS feed

  • Pregunta

  • Hola a todos, Estoy teniendo problemas para ejecutar una consulta diferida, dado que el proceso de carga es muy largo y si intento procesar los datos devueltos por la consulta normalmente me produce una excepción y otras veces me pinta solo los datos que le ha dado tiempo a obtener, lo que me sugiere que tengo que localizar algo que me avise de que la consulta está completa.

    El hecho es que si recojo la consulta en un bloque try-catch y pongo un punto de ruptura en el catch, al producirse la excepción y pararse en el catch si subo el puntero de ejecución de nuevo al try la segunda vez ya funciona, pero como reemplazo mi subida manual del puntero de ejecución por algún código

    os pongo la sentencia

               IEnumerable<string> R = null;
                try
                {
                    R = Registers(tax, action);
                    WriteRegisters(R, fileName, totalWidth);  --> esta línea la primera vez genera una excepción y la segunda funciona perfectamente
                }
                catch (Exception ex)
                {
                   var x = ex.message;
                }

    miércoles, 29 de agosto de 2018 7:21

Respuestas

  • hola

    >>Estoy teniendo problemas para ejecutar una consulta diferida,

    que es una consulta diferida?

    >>si recojo la consulta en un bloque try-catch y pongo un punto de ruptura en el catch, al producirse la excepción

    que dice el mensaje de error ? si tiene analiza el InnerException a veces ayuda

    >>pero como reemplazo mi subida manual del puntero de ejecución por algún código

    no se que hace dentro Registers o WriteRegisters como para ver que puede estar pasando

    usas alguna libreria en concreto? te conectas alguna base de datos?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 29 de agosto de 2018 13:22

Todas las respuestas

  • hola

    >>Estoy teniendo problemas para ejecutar una consulta diferida,

    que es una consulta diferida?

    >>si recojo la consulta en un bloque try-catch y pongo un punto de ruptura en el catch, al producirse la excepción

    que dice el mensaje de error ? si tiene analiza el InnerException a veces ayuda

    >>pero como reemplazo mi subida manual del puntero de ejecución por algún código

    no se que hace dentro Registers o WriteRegisters como para ver que puede estar pasando

    usas alguna libreria en concreto? te conectas alguna base de datos?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 29 de agosto de 2018 13:22
  • - Cuando digo una consulta diferida me refiero a una query de Linq diferida (Deferred query)  

    - la llamada a Registers devuelve una Ienumerable diferida utilizando yield result, donde Registers es el nombre de un método

    - No hay base de datos es una consulta sobre un modelo en memoria y parece que la consulta tarda más de lo esperado y dispara algún timeout que provoca una excepción, y lo curioso es que si se para la ejcución con un punto de ruptura y se llama otra vez al método WriteRegisters, o directamente desde el catch se llama de nuevo a WriteRegisters ya no falla.

    Lo que yo buscaba era parar la ejecución el tiempo necesario para que se completara la carga, pero no podía poner un thread.sleep porque lo para todo, al final he encontrado una opción mediante la clase Tasks y sus métodos Wait y WaitAll que me pueden servir para que una tarea espere a la anterior.

    Gracias

    miércoles, 29 de agosto de 2018 20:18