同步数据库在IHttpAsyncHandler中读取

时间:2009-05-07 01:33:10

标签: asp.net ihttpasynchandler

在asp.net上,如果我在带有delegate.BeginInvoke的IHttpAsyncHandler中调用同步数据库查询,它是否仍会在读取数据库时释放asp.net工作线程?

例如,这篇文章:http://madskristensen.net/post/How-to-use-the-IHttpAsyncHandler-in-ASPNET.aspx

如果我在ServeContent中放入同步数据库调用,请求是否仍会异步发生?

2 个答案:

答案 0 :(得分:1)

没有。这是一个误导性的文章暗示它确实存在。为了获得IHttpAsyncHandler的好处,你必须调用异步响应的东西。例如。 Web服务,异步数据库调用(例如SqlCommand.BeginExecuteReader),在睡眠线程中唤醒某些内容等。

TransmitFile(在示例文章中使用)不是异步的,它是同步的。它就像任何其他同步调用一样使用工作线程。

答案 1 :(得分:0)

查看BeginExecuteReader的mysql实现,它只创建一个委托并在AsyncExecuteWrapper方法上调用BeginInvoke,该方法只调用ExecuteReader。这对我来说似乎不对,因为它只是委托内部的同步调用。所以,即使我在IHttpAsyncHandler中使用mysql连接器BeginExecuteReader,我也行不通。会吗?

感谢。