在ASP.Net应用程序中,用户单击网页上的按钮,然后通过事件处理程序在服务器上实例化对象,并在该对象上调用方法。该方法由外部系统处理,这可能需要一段时间。因此,我想做的是在另一个线程中运行该方法调用,以便我可以通过“您的请求已提交”将控制权返回给用户。我很乐意以“一劳永逸”的方式完成此操作,尽管如果用户可以继续轮询对象的状态会更好。
我不知道的是,即使用户会话已过期,IIS是否仍允许我的线程继续运行。想象一下,用户触发事件,我们实例化服务器上的对象,并在新线程中触发该方法。用户对“您的请求已提交”消息感到满意,并关闭其浏览器。最终,此用户会话将在IIS上超时,但该线程可能仍在运行,正在工作。IIS将允许线程继续运行,还是在用户会话期满后将其杀死并处理该对象?
编辑:从答案和评论中,我了解做到这一点的最佳方法是将长时间运行的处理移到IIS之外。除了其他方面,这还涉及appdomain回收问题。在实践中,我需要在有限的时间内发布版本1,并且必须在现有的框架内工作,因此想避免使用服务层,因此希望只在IIS内部启动线程。实际上,这里的“长时间运行”仅需几分钟,并且网站上的并发性较低,因此应该可以。但是,下一版本肯定需要拆分为单独的服务层。