Ich bin verwirrt über das Verhalten dieses Befehls:Wartet "awarte command.ExecuteReaderAsync()" auf den Abschluss der Abfrage vor der Rückgabe?
SqlDataReader reader = await command.ExecuteReaderAsync(CommandBehavior.SequentialAccess)
Ich würde am liebsten die Abfrage am Laufen beginnen und sobald SQL Server welche Ergebnisse beginnt, beginnen sie zu verarbeiten. Dies ist im Gegensatz zu Warten auf alle Ergebnisse von SQL Server zurückgegeben werden. Es scheint, als könnte dies mein Programm um etwa 40% beschleunigen, wenn SQL Server Management Studio die Ergebnisse für meine Abfrage zurückgibt.
Es scheint, dass es möglich sein sollte und einige Orte wie this scheinen darauf hinzuweisen, dass es ist.
Ich bin neu in async
Programmierung, aber es scheint mir, wie das Kommando der Leser ruft, einen separaten Thread Ausgründung, es zu tun, dann wartet die ExecuteReader
zu beenden, die dann eine SQLDataReader
fertig zurückgibt.
Bedeutung, die ohne async
dazu ist genau die gleiche Befehl:
SqlDataReader reader = command.ExecuteReader(CommandBehavior.SequentialAccess)
Oder die SQLDataReader
von ExecuteReader
natürlich Streaming unterstützen und nur lange genug warten für den Strom vor der Rückkehr zur Verfügung steht zurückgekehrt? Funktioniert es, ob ich rufe ExecuteReader
vs ExecuteReaderAsync
?
Vielen Dank im Voraus!
Es gibt keinen separaten Thread, es blockiert gerade nicht den aktuellen Thread, während die IO des Sprechens mit der DB auftritt. Es wartet immer noch darauf, dass die DB zurückkehrt, bevor der folgende Code ausgeführt wird. 'Async' besteht hauptsächlich darin, Threads nicht zu blockieren, damit entweder ein UI-Thread UI-Ereignisse verarbeitet oder ein Server mit blockierten Threads, die neue eingehende Anfragen verarbeiten könnten, überlastet wird. Es kann aber auch verwendet werden, wenn auf andere Threads gewartet wird, um die CPU-gebundene Arbeit ebenfalls zu beenden. – juharr
Seitennotiz: post zeigt Beispiel von * Ausführen * der Abfrage, fragt aber nach * Leseergebnisse * der Abfrage (das ist [NextResultASync] https://msdn.microsoft.com/en-us/library/hh223698 (v = vs.110) .aspx)).Ich bin mir nicht sicher, ob dies nur durch falsch eingefügtes Sample oder Missverständnis dazu, wie Daten abgefragt werden, verursacht wird. Auch die Verwendung von "return" ist möglicherweise verwirrend, da "async" -Funktionen sofort beim ersten echten "have" zurückkommen ... –
Wie kann der von Ihnen angegebene Link Ihre Frage zur Semantik nicht beantworten? Es demonstriert die Verwendung der Methode und beschreibt speziell, wie sie zum Streamen der Ergebnisse verwendet werden kann. Was ist damit, verstehst du nicht? – Servy