Почему EndExecuteNonQuery () необходим? - PullRequest
3 голосов
/ 12 ноября 2010

В документации здесь говорится, что

разработчики должны вызвать метод EndExecuteNonQuery для завершения операции.

Я не смог найтихорошая причина, почему это так, или каковы результаты отказа от вызова EndExecuteNonQuery.

Есть ли понимание того, что произойдет, если он не будет вызван?Я не хочу блокировать это, есть ли способ для его автоматического вызова в AsyncCallback?

Ответы [ 2 ]

4 голосов
/ 12 ноября 2010

Это будет делать такие вещи, как:

  • обновить значения параметров (выход / возврат)
  • проверка исключений (коды ошибок в потоке TDS - нарушение ограничений и т. Д.)
  • освободить любые объекты / данные, буферизованные как часть вышеупомянутого и т. Д.

Так что да: сделай это

1 голос
/ 12 ноября 2010

По определению, все такие асинхронные вызовы не могут быть выполнены в блоке using, чтобы убедиться, что соединение закрыто. Таким образом, вызов EndExecutexxx необходим.

Глядя на код в отражателе, мы видим след закрытия соединения в EndExecuteNonQuery:

 SqlDataReader reader = this.CompleteAsyncExecuteReader();
 if (reader != null)
 {
      reader.Close();
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...