用于队列轮询的asp.net Thread vs IRegisteredObject

时间:2014-10-21 21:46:18

标签: asp.net multithreading iis threadpool iis-8.5

我有一个ASP.NET应用程序,我需要在新线程上轮询Amazon队列服务。我知道如果我生成一个新线程,ASP.NET就不会意识到它,并且如果出于任何原因认为应用程序池需要被回收,可能会突然终止它,例如更改web.config。

我通过手动回收IIS中的应用程序池来测试这个,但是问题是线程没有回来并在回收后开始轮询。这是否意味着在生产中线程将在IIS感觉到时停止轮询?

也许我应该注意其他情况?

所以问题是Thread对于这种类型的处理是不安全的。或者我应该使用IRegisteredObject在哪种情况下,我应该何时在global.asax或RegisterObject()/UnregisterObject()中的Application_End中致电AppDomain.CurrentDomain.DomainUnload

1 个答案:

答案 0 :(得分:1)

Web服务器不适用于长时间运行或计划任务。正如您所提到的,服务器可能会选择在感觉到并且无法恢复以前未完成的工作时关闭自己,它只是中止它。您可以做的最好的事情是使用一些预定的访问程序,每隔x分钟就会访问您的网站,以使其保持活跃状态​​,并希望服务器在此之前不会杀死该主题。然后在开始请求事件中检查线程是否处于活动状态,如果没有重新启动它。但我强烈建议使用Windows服务来执行您想要的操作,而不是在Web服务器上执行此操作。

相关问题