Мой ASP.NET (3.5) приложение позволяет пользователям выполнять некоторые сложные запросы, которые могут занять до 4 минут для возврата результатов.
Когда я сделаю длинные циклы кода, я проверю Response.IsClientConnected()
иногда, таким образом, я могу закончить страницу, если пользователь закрывает их браузер или поражает кнопку остановки.
Но при запросах SQL Server, мой код.NET заблокирован в вызове к GetDataReader()
.
Существует ли простой способ сделать GetDataReader () асинхронно, таким образом, я могу ждать его, но все еще проверить, скажем, каждые 5-10 секунд, чтобы видеть, соединен ли пользователь все еще, и залог на запросе базы данных, если они уехали?
Или есть ли некоторая другая альтернатива, о которой я не думаю?
вы можете использовать BeginExecuteReader команды sql, чтобы получить асинхронный sqlreader пример
не на 100% уверены, что это то, что вам нужно?
Я бы предложил создать объект, который имеет методы Start ()
и Wait ()
, инкапсулирующие ваш запрос. Внутренне используйте ManualResetEvent
, чтобы дождаться завершения запроса. Вы будете использовать функцию Set ()
, когда запрос будет завершен, и метод WaitOne ()
или WaitOne (TimeSpan ts)
, чтобы ждать его в ваш метод Wait ()
.