我很困惑這個命令的行爲:「await command.ExecuteReaderAsync()」在返回之前是否等待查詢完成?
SqlDataReader reader = await command.ExecuteReaderAsync(CommandBehavior.SequentialAccess)
我會非常喜歡的SQL服務器開始返回結果開始查詢運行,並儘快,開始處理它們。這與等待SQL Server返回所有結果相反。看起來像這樣可以在SQL Server Management Studio開始爲我的查詢返回結果時給出大約40%的加速計劃。
它似乎應該是可能的,一些地方如this似乎表明它是。
我是新來async
編程,但是,在我看來這樣的命令調用的讀者,分拆單獨的線程來做到這一點,那麼等待ExecuteReader
完成,然後返回一個完成SQLDataReader
。
意味着命令是完全等同於這種無async
:
SqlDataReader reader = command.ExecuteReader(CommandBehavior.SequentialAccess)
抑或從ExecuteReader
返回SQLDataReader
自然支持流,只有等待足夠長的時間流可返回前?無論我是否撥打ExecuteReader
與ExecuteReaderAsync
,它都可以工作嗎?
在此先感謝!
沒有單獨的線程,它只是在與數據庫交談的IO發生時阻塞當前線程。在執行後面的代碼之前,它仍然會等待數據庫返回。 'Async'主要是阻止線程阻止線程處理UI事件,或者避免使用可能處理新傳入請求的被阻塞線程重載服務器。但是也可以在等待其他線程完成CPU綁定工作時使用它。 – juharr
備註:post顯示*正在執行查詢的示例,但詢問查詢的結果*([NextResultASync] https://msdn.microsoft.com/zh-cn/library/hh223698(v = vs.110)的.aspx))。我不確定這是否是由於錯誤粘貼樣本或誤解數據如何查詢造成的。 「返回」的用法可能會讓人困惑,因爲「異步」函數在第一次真正的「await」時立即返回... –
您提供的鏈接無法回答您關於語義的問題嗎?它演示了該方法的用法,並具體描述瞭如何將它用於流式傳輸結果。那你知道嗎? – Servy