我正在尝试实现一种功能,其中sql Server上存在一个必须从ASP MVC应用程序调用并在后台处理的存储过程(它可能需要很长时间,因为它远程调用另一个存储过程来处理存储在其上的excel文件服务器).但是最后一个HTTP请求的响应应该返回给客户端,因此UI不会挂起等待处理.
我尝试了很多不同的方法,但UI仍然没有立即响应.
我尝试过BackgroundWorker,但它不允许主线程在完成处理之前响应客户端,
我也尝试过:
Thread.QueueUserWorkItem(delegate { //method which performs stored procedure calls// });
它仍然没有返回响应和HttpContext.Current在后台线程中不可用.
也许有一种方法可以启动后台处理,暂停它让主线程返回对浏览器的响应,然后恢复后台线程以使用存储过程调用进行所有处理?
我错过了什么吗?
有人可以问一下如何解决这个问题?非常感谢.
解决方法
我最终得到了它在我的情况下工作正常.我不确定效率,但它完全有效.因此,调用存储过程的代码我放在一个单独的线程上,以便主线程完成,而后台调用的处理在一个单独的线程上发生并在一段时间后成功完成.同时UI可用,因此用户可以发出另一个请求,该请求也将以相同的方式处理.我测试了三个请求.一个接一个地重叠,意味着当第一个请求在后台处理时我提交了另一个请求而另一个请求. UI立即响应,所有工作都完成了.
// ...main thread is working here //put a call to stored procedure on a separate thread Thread t = new Thread(()=> { //call stored procedure which will run longer time since it calls another remote stored procedure and //waits until it's done processing }); t.Start(); // ...main thread continue to work here and finishes the request so it looks for user as the response is coming right away,all other stuff is being processed on that new thread so user even doesn't suspect