c# - 在后台运行任务但在 ASP MVC Web 应用程序中返回响应给客户端

标签 c# asp.net-mvc multithreading

我正在尝试实现一个功能,其中 SQL Server 上有一个存储过程,必须从 ASP MVC 应用程序调用并在后台处理(这可能需要很长时间,因为它远程调用另一个存储过程来处理 excel文件存储在服务器上)。但是最后一个 HTTP 请求的响应应该返回给客户端,这样 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

关于c# - 在后台运行任务但在 ASP MVC Web 应用程序中返回响应给客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24828812/

相关文章:

c# - 向 Youtube 发送缓慢的 HttpClient 请求

c# - 续 MVC 区域 404 错误。无计可施

asp.net-mvc - jQuery UI AutoComplete 不过滤来自服务器的响应

c# - 防止 Visual Studio 调试在明显的 "unhandled exception"上中断

java - 如何在收到输入后通知所有线程

c - 如何在线程中共享内存

c# - 使用 C# 解析复杂的 JSON 结果

c# - 如何编写 linq 查询以防止重复连接?

c# - 如果我有静态变量,WebServices 是无状态的吗?

asp.net-mvc - 你知道任何 ASP.NET MVC 代码生成器吗?