Asp .Net后台工作者线程

时间:2015-09-07 09:46:35

标签: c# asp.net multithreading web

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

我在许多地方都读到这不是一个好习惯,因为这个线程可能会导致整个IIS进程崩溃或者可能导致其他问题。

我需要启动一个后台线程,它定期连接到另一台服务器并更新数据库,所以:

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

2 个答案:

答案 0 :(得分:3)

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

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

你可以使用一个计时器,或者更简单的一个任务:

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

请务必记录错误。

答案 1 :(得分:0)

考虑使用Azure。在那里你可以使用WebJob或WorkerRole