2015-08-23 136 views
0

在我的ASP.NET MVC应用程序中,我将运行后台任务,有时会持续大约10分钟。我已经阅读了这个主题,看到应用程序域有时会重新启动,从而删除我的线程。Hangfire如何处理应用程序域重新启动?

因此我查找了一些解决方案。我找到的主要解决方案是Hangfire。我知道它会在失败等情况下重新启动作业,但是他们是否“绕过”应用程序域以某种方式重新启动,还是只是在这种情况下重新启动作业?

回答

5

我发现的主要解决方案是Hangfire。我知道它 重新启动作业,当他们失败等,但是他们“绕过”应用程序 域以某种方式重新启动,或者它只是在这种情况下重新启动作业?

不,他们不绕过应用程序域重新启动 - 什么都不能绕过它。从documentation引用:

迟发型保持后台作业,并且涉及 永久存储内的处理的其它信息。持久性有助于 后台作业在应用程序重新启动,服务器重新启动, 等中生存。这是使用CLR的线程池和Hangfire执行后台作业 的主要区别。支持不同的存储后端 。

因此,当你排队一个新的任务时,首先要将它存储在服务器上的某个永久性存储器中,而不将其保存在内存中。通过这种方式,如果应用程序域名失效,稍后可以从该永久性存储中读取并恢复该任务。

+0

我明白了。那么我是否正确地认为,当应用程序域重新启动时,这个工作将会再次运行(从一开始)? – JensOlsen112

+0

是的,当应用程序域再次启动时,可能会在下一个请求进入时发生。或者,如果您将Hangfire用作单独的Windows服务,那么任务执行将不会被您的ASP.NET应用程序域重新启动所中断。 –

+0

好吧,我明白了。感谢您的澄清。我认为我的问题没有银弹(如果在任何时候重新运行,我的工作都会失败)。 – JensOlsen112

相关问题