Если я понимаю, что вы хотите сделать правильно, то да, вы можете выполнять асинхронные вызовы для 3 команд: ExecuteReader, ExecuteNonQuery и ExecuteXmlReader. Асинхронные версии имеют начальную / конечную часть, например BeginExecuteReader, EndExecuteReader и будет работать для того, что вы после. У вас есть несколько вариантов того, как обрабатывать возврат для этих команд.
Таким образом, вы можете запустить несколько запросов, например, с помощью sqlcommand.BeginExecuteReader, а затем у вас есть несколько вариантов того, как обработать / узнать, когда он завершится при выдаче sqlcommand.EndExecuteReader. Краткий обзор опций с некоторыми описаниями:
- Асинхронный опрос - в основном отправка команды sql, а затем повторная проверка свойства IsCompleted объекта SqlAsyncResult до его возврата.
- Асинхронный обратный вызов - вы предоставляете подпрограмму обратного вызова в качестве параметра вместе с командой sql этим методом, например, onSqlQueryComplete (вроде как обычная обработка событий), и она вызывается, когда завершается.
- Асинхронное ожидание - это используется, если вы хотите ждать и отслеживать процесс / прогресс вызовов SQL.
Каждый из асинхронных вариантов имеет свои плюсы и минусы в зависимости от того, чего именно вы хотите достичь. При использовании указанной выше опции обратного вызова № 2 псевдо-код будет выглядеть примерно так:
command = (Build all sql command stuff)
AsyncCallback callback = new AsyncCallback(HandleSqlCallback);
command.BeginExecuteReader(callback, command);
command.BeginExecuteReader()
method HandleSqlCallback(IAsyncResult result) {
do stuff when sql done
command.EndExecuteReader(result)
}
У Microsoft есть гораздо лучшие и более полные примеры, чем этот, но это дает вам общее представление о формате.
Ссылка MSDN для SqlCommand.BeginExecuteReader Method