在完成所有服务器端工作之前,是否可以将页面响应返回给用户?
是的,我有一个没有数据库的廉价主机帐户,但我想通过在我的另一个更昂贵的主机帐户上调用web服务来记录某个事件(即,一个非常慢的日志记录操作)< / p>我真的不希望用户在呈现页面之前必须等待这个慢速日志记录操作完成。
我是否需要启动新线程或进行异步调用?或者是否可以返回页面,然后继续在相同的线程/代码中愉快地工作?
使用ASP.Net(webforms)C#.Net 2.0等。
答案 0 :(得分:2)
您可能需要第二个帖子。一个简单的选择是使用ThreadPool
,但在更复杂的设置中,生产者/消费者队列可以很好地工作。
最简单的一级:
ThreadPool.QueueUserWorkItem(delegate {
DoLogging(state details);
});
答案 1 :(得分:1)
您确定可以 - 尝试Response.Flush
。
话虽如此 - 创建异步调用可能是做你想做的事情的最佳方式。 Response.Flush
只是将输出缓冲区刷新到客户端,异步调用将允许您触发日志记录调用,而不会影响客户端的加载时间。
请记住,在ASP.NET的页面生命周期中进行的异步调用可能无法及时返回,无法对响应做任何事情。