当用户的浏览器断开连接时,如何在ASP.NET中取消数据库查询?

时间:2010-03-05 19:56:39

标签: asp.net sql-server asynchronous

我的ASP.NET(3.5)应用程序允许用户运行一些复杂的查询,最多可能需要4分钟才能返回结果。

当我正在进行长循环代码时,我会偶尔检查Response.IsClientConnected(),这样如果用户关闭浏览器或点击停止按钮,我就可以结束页面。

但是在查询SQL Server时,我的.NET代码在调用GetDataReader()时被阻止。

是否有一种直接的方式来异步执行GetDataReader()所以我可以等待它,但仍然检查,比如说,每5-10秒检查一下用户是否仍然连接,并保证数据库查询,如果他们'我离开了?

或者还有其他一些我没想过的选择吗?

2 个答案:

答案 0 :(得分:5)

您可以使用sqlcommand BeginExecuteReader获取异步sqlreader example

不是100%确定你能得到什么?

link showing cancel

答案 1 :(得分:1)

我建议创建一个包含Start()Wait()方法的对象封装您的查询。在内部使用ManualResetEvent等待查询完成。您将在查询完成时使用Set()函数,并在WaitOne()方法中使用WaitOne(TimeSpan ts)Wait()方法等待它。