2014-10-21 100 views
0

我有一个ASP.NET应用程序,我需要在新线程上轮询Amazon队列服务。我知道,如果我产生了一个新的线程,ASP.NET并没有意识到它,并且如果它由于某种原因认为应用程序池需要被回收,可能会突然终止,例如更改web.config。asp.net线程与IRegisteredObject队列轮询

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

也许我应该知道的其他情况?

所以问题是Thread这种类型的处理不安全。或者我应该使用IRegisteredObject,在这种情况下,我应该在0123.中调用RegisterObject()/UnregisterObject() in global.asax或AppDomain.CurrentDomain.DomainUnload

回答

1

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