asp.net:停止响应,继续执行

时间:2014-07-29 11:47:19

标签: c# asp.net

在asp.net中,我想给客户立即响应并关闭连接,然后继续执行可能很长并显示不重要的消息。但客户无法看到这一点。

我已经尝试过Response.Flush / Close / EndCompleteRequest和匿名代表,但无法使用它。

示例:

Response.Write("time: "+HttpContext.Current.Session["test"]);

MagicallyEndReponse(); //But how?

Thread.Sleep(10000);                                 //Customer should not experience any delay
HttpContext.Current.Session["test"] = DateTime.Now;  //This should be available when reloading 15s later
Response.Write("BORING INFO!");                      //Customer should not see this

1 个答案:

答案 0 :(得分:2)

我不建议在ASP.NET应用程序中使用后台线程处理,但这不是ASP.NET或IIS的设计目的。

我的建议是看一个单独的服务(例如内部Windows服务)从网站上获取工作并处理它,这将允许您编写更强大的多线程应用程序。您可以使用持久的消息传递系统(如MSMQ / NServiceBus)向服务传递消息(这意味着如果网站发生故障或重新启动,则不会丢失任何工作)。

这些类型的请求的自然响应是202 Accepted,然后可能会公开API以供客户端查询以检查进度。