Tengo un procedimiento almacenado, que escribe una copia de seguridad de una base de datos específica. Llamo a este SP en una aplicación C#/Formularios de Windows de manera sincronizada. Aquí está el código snipped:SQL Server2008: BeginExecuteNonQuery/EndExecuteNonQuery Problema
IAsyncResult result = command.BeginExecuteNonQuery();
while (!result.IsCompleted)
{
System.Threading.Thread.Sleep(1000);
...
}
command.EndExecuteNonQuery(result));
Después de algún tiempo el programa sale del bucle, porque IsCompleted = true y llama EndExecuteNonQuery. El problema ahora es que el trabajo todavía está ocupado y EndExecuteNonQuery es bloqueado! Esto provoca un tiempo de espera del servidor después de algunos minutos. Parece que el valor de IsCompleted no es coherente, respectivamente, ¿qué ocurre con IsCompleted? ¿Cómo puedo lograr que mi programa reconozca el "estado de trabajo real"?
¿Existe una razón por la que no se utiliza la sobrecarga de devolución de llamada para ¿BeginExecuteNonQuery y espera a que se llame la devolución de llamada antes de llamar a EndExecuteNonQuery? – btlog