C# 是不是;等待命令。ExecuteReaderAsync();是否在返回之前等待查询完成?
我对这个命令的行为感到困惑:C# 是不是;等待命令。ExecuteReaderAsync();是否在返回之前等待查询完成?,c#,sql-server,async-await,C#,Sql Server,Async Await,我对这个命令的行为感到困惑: SqlDataReader reader = await command.ExecuteReaderAsync(CommandBehavior.SequentialAccess) 理想情况下,我希望开始运行查询,一旦SQL server开始返回结果,就开始处理它们。这与等待SQL Server返回所有结果相反。当SQLServerManagementStudio开始为我的查询返回结果时,这似乎可以将我的程序速度提高约40% 似乎这应该是可能的,有些地方,例如,似乎
SqlDataReader reader = await command.ExecuteReaderAsync(CommandBehavior.SequentialAccess)
理想情况下,我希望开始运行查询,一旦SQL server开始返回结果,就开始处理它们。这与等待SQL Server返回所有结果相反。当SQLServerManagementStudio开始为我的查询返回结果时,这似乎可以将我的程序速度提高约40%
似乎这应该是可能的,有些地方,例如,似乎表明这是可能的
我对async
编程是新手,但是,在我看来,该命令似乎是在调用读取器,分离出一个单独的线程来执行,然后等待ExecuteReader
完成,然后返回一个完成的SQLDataReader
这意味着该命令与此命令完全等效,而不使用async
:
SqlDataReader reader = command.ExecuteReader(CommandBehavior.SequentialAccess)
或者从ExecuteReader
返回的SQLDataReader
是否自然地支持流式处理,并且只等待足够长的时间,流才能返回?无论我调用ExecuteReader
vsExecuteReaderAsync
,它都能工作吗
提前谢谢
然而,在我看来,该命令似乎在调用读取器,分离出一个单独的线程来执行,然后等待ExecuteReader
完成,然后返回一个完成的SQLDataReader
你。async
方法应该做的是启动一个操作,暂停当前方法的执行,释放当前线程,操作可用后,恢复状态机并调用方法的其余部分
连接到SQL server是一个I/O操作,应该在异步模式下运行,因为此操作实际上不需要.Net
线程。连接打开后,同步和异步读卡器的行为将完全相同-与正常的.Net
类一样
与此方法的同步版本相比,连接到SQL server时,一次可以有一个空闲线程,而状态机的开销较小。没有单独的线程,只是在与DB对话的IO发生时不会阻塞当前线程。它仍将等待DB返回,然后执行它后面的代码
Async
主要是关于不阻塞线程,以允许UI线程处理UI事件,或避免使用阻塞的线程使服务器过载,这些线程可能正在处理新的传入请求。但它也可以在等待其他线程完成CPU限制的工作时使用。旁注:post显示了执行查询的示例,但询问了查询的读取结果(即[NextResultASync])。我不确定这是否是由于样本粘贴错误或对数据查询方式的误解造成的。另外,“return”的用法可能会令人困惑,因为async
函数在第一次realwait
时会立即返回……您提供的链接如何无法回答您关于语义的问题?它演示了该方法的使用,并具体描述了如何使用它来流式处理结果。你不明白吗?