私は、このコマンドの動作について困惑している:"await command.ExecuteReaderAsync()"はクエリが終了するのを待ってから戻るか?
SqlDataReader reader = await command.ExecuteReaderAsync(CommandBehavior.SequentialAccess)
私は理想的なクエリの実行を開始するとすぐSQLサーバーが結果を返す開始して、それらの処理を開始したいと思います。これは、すべての結果がSQL Serverによって返されるのを待つのとは対照的です。これは、SQL Server Management Studioがクエリの結果を返すときに、プログラムを約40%高速化できるようです。
thisのようにいくつかの箇所があると思われるようです。
私はそのコマンドがExecuteReader
が、その後終了SQLDataReader
返し、終了するのを待って、その後、それを行うには別のスレッドをスピンオフ、読者を呼び出しているようしかし、それは私には思える、async
プログラミングに新たなんです。
SqlDataReader reader = command.ExecuteReader(CommandBehavior.SequentialAccess)
それともSQLDataReader
がExecuteReader
から返された自然ストリーミングをサポートし、のみ返す前に利用できるようにストリームのために十分な長待つん:?コマンドはasync
せずに、このとまったく同じであることを意味
ExecuteReader
とExecuteReaderAsync
を呼び出すかどうかは問題ありませんか?
ありがとうございます!そのコマンドがExecuteReader
が、その後終了SQLDataReader
返し、終了するのを待って、その後、それを行うには別のスレッドをスピンオフ、リーダーを呼んでいるよう
別スレッドはありません.DBとの会話のIOが発生している間は、現在のスレッドをブロックしていません。それは、それに続くコードが実行される前にDBが戻るのを待ちます。 'Async'は、UIスレッドがUIイベントを処理できるようにスレッドをブロックしないこと、または新しい着信要求を処理できるブロックされたスレッドでサーバーをオーバーロードさせないことです。しかし、他のスレッドがCPUバインド作業を終了するのを待っているときにも使用できます。 – juharr
サイドノート:postは*クエリの*実行*の例を示していますが、クエリの*結果の読み取りについて質問します([NextResultASync] https://msdn.microsoft.com/en-us/library/hh223698(v = vs.110).aspx))。これは誤って貼り付けられたサンプルやデータのクエリ方法の誤解が原因であるかどうかはわかりません。また、 'return 'の使用法は、' async'関数が最初の実際の 'await'ですぐに返るので混乱を招く可能性があります... –
あなたが提供したリンクは、セマンティクスについてのあなたの質問に答えることができません。このメソッドの使用方法を示し、具体的にどのように使用して結果をストリーミングするかについて説明します。あなたは理解できませんか? – Servy