线程系统如何在ASP.NET MVC上运行?
如果我在请求上生成新线程,则执行某项任务。当请求结束或超时时,这个线程会被杀死吗?
例如,
我有一个接收csv文件的Action方法,需要将其解析并保存到数据库中。现在正确的方法是运行一个执行这些请求的服务,但在我的情况下,这个导入只会发生一个月一次,对我们来说维护运行24/7的服务是不值得的它的好处。
是否有一种服务可以在IIS环境中运行,而不受HTTP请求状态的影响?
答案 0 :(得分:2)
您将始终遵守应用程序池的生命周期设置。如果在任何时候,没有其他请求进入IIS也由应用程序池提供服务,则您的请求将在应用程序池关闭时停止。您有两种选择:增加应用程序池的生命周期或转到Windows服务路由。您可以在上传之前编写延长游泳池生命周期的脚本,然后将其编写为更短,更易于管理的长度。
答案 1 :(得分:1)
扩大Josh的回答。请求处理结束后,线程不会被终止。但如果您的应用程序池的w3wp由于某种原因被杀死,它可能会被杀死。 Josh所说的一个原因,如果异常冒泡而你的代码没有处理,也可能发生这种情况,并且应用程序池可能会因为几个原因而回收。
Windows服务是一种解决方案。在一个项目中,我使用AppFabric将应用程序池设置为永不回收并始终保持打开状态。这对我来说非常有用,对于客户特定的故事,也可能是适合您的解决方案。
查看here了解更多信息。