我的ASP.NET(3.5)应用程序允许用户运行一些复杂的查询,最多可能需要4分钟才能返回结果。
当我正在进行长循环代码时,我会偶尔检查Response.IsClientConnected()
,这样如果用户关闭浏览器或点击停止按钮,我就可以结束页面。
但是在查询SQL Server时,我的.NET代码在调用GetDataReader()
时被阻止。
是否有一种直接的方式来异步执行GetDataReader()所以我可以等待它,但仍然检查,比如说,每5-10秒检查一下用户是否仍然连接,并保证数据库查询,如果他们'我离开了?
或者还有其他一些我没想过的选择吗?
答案 0 :(得分:5)
答案 1 :(得分:1)
我建议创建一个包含Start()
和Wait()
方法的对象封装您的查询。在内部使用ManualResetEvent
等待查询完成。您将在查询完成时使用Set()
函数,并在WaitOne()
方法中使用WaitOne(TimeSpan ts)
或Wait()
方法等待它。