https://stackoverflow.com/a/9434687/23900248образное. Первый результат возвращается к клиенту, а информационные сообщения считаются результатом.
Вы потеряли все преимущества Async. Печать создает результат, который отправляется обратно клиенту, который завершает команду и выполнение Async на клиенте возобновляется и продолжается с «reader.read ()». Теперь это будет блокировать, пока сложный запрос не начнет давать результаты. Вы спрашиваете: «Кто ставит печать в процедуру?» Но печать может быть замаскирован в чем -то другом, возможно, что -то невинное, похожее на вставку, которая выполняется без сначала, сначала выпуская установленную настройку. Есть обходной путь? Как правильный способ асинхронно вызвать хранимую процедуру, которая дает много результатов, включая сообщения, которые, например, информируют клиента о статусе выполнения? < /P>
В примере: < /p>
Код: Выделить всё
declare @K int=0, @Progress varchar(255)
while @K
Печать создает результат, который отправляется обратно клиенту, который
завершает команду Async, а исполнение на клиентском резюме и
продолжается с 'readerer.). Теперь это будет блокировать до тех пор, пока комплексный запрос
не начнет давать результаты. /> < /blockquote>
Однако я не понимаю, почему прибытие сообщения требует маркировки команды как завершенное. Единственная причина, которая приходит мне на голову, - это то, что сообщения, обрабатываемые по историческим причинам, как события, нарушают цепь Async/await. И что еще более важно, существует ли чисто асинхронный/ожидающий способ предотвратить его заблокирование?
за управление асинхронным вызовом в задаче .run () решает проблему, но кажется, что задача. Run более эффективен, чем сам асинхронный метод, это означает, что асинхронный метод широко оптимизируется, правильно?>
Подробнее здесь: [url]https://stackoverflow.com/questions/78268242/async-programming-with-ado-net[/url]