我有一个asp.net页面,其中有一个按钮,供用户通过调用SQL Server 2005中的存储过程来运行计算。计算可能需要一个小时或更长时间。当用户单击按钮以运行存储过程...浏览器将等待服务器的响应,直到计算完成。由于计算将耗费大量时间,所以无论如何要求浏览器在计算完成之前不等待服务器的响应?
答案 0 :(得分:1)
Response.Flush();
应该可以解决问题。我之前在SO Instruct the browser not to wait for more content while processing continues上问过一个非常类似的问题,您可能想要研究为这样的任务生成一个新线程。
更新:
来自线程的this answer:
{
System.Threading.Thread _thread = new Thread(new ThreadStart(Activity_DoWork));
_thred.Start();
}
Activity_DoWork()
{
//Do some things...
}
答案 1 :(得分:1)
我的建议是找到解决问题的其他方法。您真的不希望在ASP.NET工作进程中执行长时间运行的任务,如discussed several times before。
主要问题之一是Web服务器回收工作进程的风险,在不给您任何机会自动重启的情况下终止您的工作。考虑将长时间运行的处理移动到单独的服务应用程序,该应用程序在后台运行并等待一些信号开始处理。
您的Web应用程序可以写入消息队列或触摸磁盘上的文件以唤醒服务。如果要运行的任务仅处理数据库,则可以使用SQL Server Agent,而不是构建自己的服务。
答案 2 :(得分:0)
您可能需要使用Ajax异步调用该函数。
修改 - 添加
我通过以下链接找到了这个问题。
BackgroundWorker thread in ASP.NET
但我仍然支持我的原始答案,即使用Ajax。
答案 3 :(得分:0)
我没有一个很好的链接供你关注,但产生一个新的后台线程是可以做的。
答案 4 :(得分:0)
如果您需要在流程完成时调用某些内容或者需要结果,那么您可以使用异步方法。
http://www.beansoftware.com/asp.net-tutorials/asynchronous-execution-pattern.aspx