在asp.net上,如果我在带有delegate.BeginInvoke的IHttpAsyncHandler中调用同步数据库查询,它是否仍会在读取数据库时释放asp.net工作线程?
例如,这篇文章:http://madskristensen.net/post/How-to-use-the-IHttpAsyncHandler-in-ASPNET.aspx
如果我在ServeContent中放入同步数据库调用,请求是否仍会异步发生?
答案 0 :(得分:1)
没有。这是一个误导性的文章暗示它确实存在。为了获得IHttpAsyncHandler
的好处,你必须调用异步响应的东西。例如。 Web服务,异步数据库调用(例如SqlCommand.BeginExecuteReader
),在睡眠线程中唤醒某些内容等。
TransmitFile
(在示例文章中使用)不是异步的,它是同步的。它就像任何其他同步调用一样使用工作线程。
答案 1 :(得分:0)
查看BeginExecuteReader的mysql实现,它只创建一个委托并在AsyncExecuteWrapper方法上调用BeginInvoke,该方法只调用ExecuteReader。这对我来说似乎不对,因为它只是委托内部的同步调用。所以,即使我在IHttpAsyncHandler中使用mysql连接器BeginExecuteReader,我也行不通。会吗?
感谢。