Синхронное чтение базы данных внутри IHttpAsyncHandler

На asp.net, если я вызову синхронный запрос к базе данных внутри IHttpAsyncHandler с делегатом. BeginInvoke, будет ли он освобождать рабочий поток asp.net при чтении базы данных?

Например, этот пост: http://madskristensen.net/post/How-to-use-the-IHttpAsyncHandler-in-ASPNET.aspx

Если я помещу синхронный вызов базы данных в ServeContent, будет ли запрос выполняться асинхронно?

2 ответа

Нет. И это вводящая в заблуждение статья, подразумевающая, что это так. Для того, чтобы получить преимущества IHttpAsyncHandler Вы должны вызвать что-то, что отвечает асинхронно. Например, веб-сервис, асинхронный вызов базы данных (например, SqlCommand.BeginExecuteReader) что-то просыпаться в спящей ветке и т. д.

TransmitFile (который используется в статье-примере) не асинхронный, а синхронный. И он использует рабочий поток, как и любой другой синхронный вызов.

Рассматривая реализацию mysql BeginExecuteReader, он только создает делегат и вызывает BeginInvoke для метода AsyncExecuteWrapper, который просто вызывает ExecuteReader. Это не кажется мне правильным, так как это будет только синхронный вызов внутри делегата. Таким образом, даже если я использую соединитель MySQL BeginExecuteReader внутри IHttpAsyncHandler, я не буду работать. Будет ли это?

Благодарю.

Другие вопросы по тегам