我收到了httpRequest,它提出了很长的业务逻辑(大约1秒)。我必须在0.2秒内给httpSender回答,否则我会收到第二个httpRequest。
现在我遇到了下一个问题:我在收到httpRequest后立即给出了httpResponse,但是Response.End()停止了所有其余的工作。那么,要实现这一点:既提供快速响应和处理请求?
我看到只在其他线程中创建线程和处理请求,但我担心Response.End()也会停止一个线程。
答案 0 :(得分:0)
您应该从http调用处理中处理业务逻辑异步。启动一个处理bl方法的新线程并继续发送响应。如果您正确启动它,您的线程将不会被停止。
答案 1 :(得分:0)
是的,你是对的,你只能为一个请求发送一个响应,并且异步执行此操作对你没有帮助,因为在后台线程完成之前你无法保留请求。解决这个问题的理想方法是在小部件中打破api(服务器方法)并优化逻辑,以便在预期时间内响应。 如果您正在计算大型数据集而不是建议使用Windows服务(或其他一些后台机制)来计算和存储数据库中的计算数据。
答案 2 :(得分:0)
在长时间运行的任务开始之前,尽快通过Response.Flush()发送请求。这将立即将标头发送到客户端。提醒:在该调用之后,您将无法更改HTTP标头。