我很困惑这个命令的行为:“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