У меня есть хранимая процедура, которая записывает резервную копию конкретной базы данных. Я вызываю этот SP в приложении C#/Windows Forms asynchrounously. Вот код отрезала:SQL Server2008: BeginExecuteNonQuery/EndExecuteNonQuery Задача
IAsyncResult result = command.BeginExecuteNonQuery();
while (!result.IsCompleted)
{
System.Threading.Thread.Sleep(1000);
...
}
command.EndExecuteNonQuery(result));
Через некоторое время программа выходит из цикла, потому что IsCompleted = истина и вызывает EndExecuteNonQuery. Проблема в том, что задание еще занято и EndExecuteNonQuery is заблокирован! Это вызывает тайм-аут сервера через несколько минут. Кажется, что значение IsCompleted не соответствует соответственно тому, что не так с IsCompleted? Как я могу добиться того, что моя программа распознает «реальный статус работы» ?
есть причина, почему вы не используете перегрузки обратного вызова для BeginExecuteNonQuery и ждать, пока обратный вызов будет вызван до вызова EndExecuteNonQuery? – btlog