在asp.net中,我想给客户立即响应并关闭连接,然后继续执行可能很长并显示不重要的消息。但客户无法看到这一点。
我已经尝试过Response.Flush / Close / End
,CompleteRequest
和匿名代表,但无法使用它。
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
答案 0 :(得分:2)
我不建议在ASP.NET应用程序中使用后台线程处理,但这不是ASP.NET或IIS的设计目的。
我的建议是看一个单独的服务(例如内部Windows服务)从网站上获取工作并处理它,这将允许您编写更强大的多线程应用程序。您可以使用持久的消息传递系统(如MSMQ / NServiceBus)向服务传递消息(这意味着如果网站发生故障或重新启动,则不会丢失任何工作)。
这些类型的请求的自然响应是202 Accepted,然后可能会公开API以供客户端查询以检查进度。