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