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