是否可以在继续慢速服务器端工作之前返回ASP页面(例如,日志记录)

在完成所有服务器端工作之前,是否可以将页面响应返回给用户?

即,我有一个没有数据库的廉价主机帐户,但我想通过在我的另一个更昂贵的主机帐户上调用web服务来记录某个事件(即,非常慢的日志记录操作)

我真的不希望用户必须等待这个慢速日志记录操作在呈现页面之前完成。

我需要启动新线程,还是进行异步调用? 或者是否可以返回页面,然后继续在相同的线程/代码中愉快地工作?

使用ASP.Net(webforms)C#.Net 2.0等

你可能需要第二个线程。 一个简单的选择是使用ThreadPool ,但在更复杂的设置中,生产者/消费者队列可以正常工作。

在最简单的层面:

  ThreadPool.QueueUserWorkItem(delegate { DoLogging(state details); }); 

你确定可以 – 尝试Response.Flush

话虽这么说 – 创建一个异步调用可能是你想做的最好的方式。 Response.Flush只是将输出缓冲区刷新到客户端,异步调用将允许您触发日志记录调用,而不会影响客户端的加载时间。

请记住,在ASP.NET的页面生命周期中进行的异步调用可能无法及时返回,您无法对响应执行任何操作。