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