我维护一个ASP.NET Web应用程序,该应用程序在执行过程时会导致用户的网络连接重置几秒钟。因此,页面请求在用户端超时,因为它们从未收到Web应用程序的响应(连接在获取响应数据包之前就已消失)。
为了解决这种情况,我正在考虑让ASP.NET页面执行一个包含Thread.Sleep(5000); // sleep for 5 seconds before executing the connection reset
的异步函数。这样,浏览器在连接重置之前有5秒钟的时间来接收页面的响应。
我担心在ASP.NET中使用Thread.Sleep和异步函数。我以前从未尝试过,所以我不确定它可能造成的潜在问题。有没有人看到在ASP.NET应用程序中启动包含Thread.Sleep
的异步线程的潜在问题?如果是这样,你能想到一个更好的解决方案吗?
答案 0 :(得分:3)
在异步方法中放置Thread.Sleep可能会导致ThreadPool Starvation,因为它会在几秒钟内阻止有限数量的线程之一 - 该线程可能会关闭服务客户端请求。
相反,为什么不创建一个在五秒钟后触发的计时器?同样的效果,只需在计时器事件中记录您的延迟工作。
答案 1 :(得分:1)
虽然我发现您的问题陈述过于模糊而无法正确解决,但我可以说您应该使用System.Threading.Timer而不是Sleep语句。前者是高性能的,后者会使你的一个CPU核心处于繁忙状态(非常糟糕!)。
答案 2 :(得分:1)
让线程在Web服务器上休眠通常不是一个好主意,因为线程是有限的。在您的特定情况下,您需要一个客户端,每秒〜1-2个请求,以阻止所有线程......
您应该像其他人提议的那样使用计时器,并使用AsyncPage
/ AsyncHttpHandler
来源。