2015-09-07 53 views
1

我打算在ASP .net网站的应用程序启动事件(global.asax内)中启动后台线程。Asp .Net后台工作线程

我读过很多地方,这不是一个好的做法,因为此线程可能会导致整个IIS进程崩溃或可能导致其他问题。

我要开始定期连接到另一台服务器后台线程和更新数据库,所以:

什么是在这种情况下,最好的做法是什么? 我可以将线程标记为背景,以便在其他线程停止时自动停止线程? 如果在这种情况下启动线程不是一个好的选择,那么最好的替代品是什么?

+5

因此,您阅读了不应该这样做的建议,而且您仍然想要这么做?使其成为Windows服务或计划任务。不要在IIS中执行此操作。 – CodeCaster

+0

正如@CodeCaster所说,你已经知道 - 这不是一个好习惯。为什么要把网站挂在一个线程上? (没有双关语意)。研究可以独立行事的替代方案 – JonE

回答

0

考虑使用Azure。您可以使用WebJob或WorkerRole

2

请注意,在AppDomain回收时,ASP.NET中的任何后台工作都可以在不发出警告的情况下消失。 Windows服务和计划任务有更少的理由消失,但它们也可以消失(重启,部署,蓝屏,断电或上帝禁止在您的代码中出现错误!)。

必须能够容忍任何工作消失。只要是这种情况,您就可以安全地开始后台工作。

您可以使用一个计时器,或者更简单地认为只是做一个任务:

while (true) { 
DoWork(); 
await Task.Delay(...); 
} 

,请务必登录错误。

+0

如果我无法容忍工作消失,那么使用Windows服务会更好吗? – ammcom

+0

不是真的,因为该服务也可以消失。查看答案中的列表。我通常在可重启事务中执行我想要做的所有后台工作。 – usr