我的任务是在处理请求之前传递请求内容。 我怎么能这样做?
public ActionResult UpdateRecord()
{
Response.Write("OK");
Response.End();
// I need to complete the request here and
// perform some action in the work thread
Thread.Sleep(2000);
return Content("Something user never sees");
}
答案 0 :(得分:0)
请求结束后,您无法在同一请求中将内容发送回客户端。这是不可能的。
听起来我真正想要的是异步处理请求。这是您在一个请求中启动进程的位置,然后您将继续轮询服务器(刷新页面),直到请求完成。
这通常使用某种后台服务来完成,例如Message Queue或触发Windows服务处理某些内容的Web Service。在紧要关头,您可以使用计划任务,甚至是缓存删除回调技巧。
使用后台线程通常不会起作用,因为ASP.NET工作进程启动的线程在请求结束后终止。
如果您不想使用轮询,另一种可能性是使用像SignalR这样的推送服务来通知页面作业已经完成。
编辑:
好吧,正如我所说,你不能这样做。你必须将这项工作推进到某种后台进程,但是你不能剥离一个线程,因为一旦请求结束,线程就会被终止。
关于如何做到这一点,这里有很多问题(和答案),它们都归结为我上面提到的。计划任务,执行处理的Windows服务,缓存删除回调技巧等。您还可以使用WCF单向调用WCF服务或任何其他方式。