我打算在ASP .net网站的应用程序启动事件(global.asax内)中启动后台线程。Asp .Net后台工作线程
我读过很多地方,这不是一个好的做法,因为此线程可能会导致整个IIS进程崩溃或可能导致其他问题。
我要开始定期连接到另一台服务器后台线程和更新数据库,所以:
什么是在这种情况下,最好的做法是什么? 我可以将线程标记为背景,以便在其他线程停止时自动停止线程? 如果在这种情况下启动线程不是一个好的选择,那么最好的替代品是什么?
我打算在ASP .net网站的应用程序启动事件(global.asax内)中启动后台线程。Asp .Net后台工作线程
我读过很多地方,这不是一个好的做法,因为此线程可能会导致整个IIS进程崩溃或可能导致其他问题。
我要开始定期连接到另一台服务器后台线程和更新数据库,所以:
什么是在这种情况下,最好的做法是什么? 我可以将线程标记为背景,以便在其他线程停止时自动停止线程? 如果在这种情况下启动线程不是一个好的选择,那么最好的替代品是什么?
考虑使用Azure。您可以使用WebJob或WorkerRole
请注意,在AppDomain回收时,ASP.NET中的任何后台工作都可以在不发出警告的情况下消失。 Windows服务和计划任务有更少的理由消失,但它们也可以消失(重启,部署,蓝屏,断电或上帝禁止在您的代码中出现错误!)。
你必须能够容忍任何工作消失。只要是这种情况,您就可以安全地开始后台工作。
您可以使用一个计时器,或者更简单地认为只是做一个任务:
while (true) {
DoWork();
await Task.Delay(...);
}
,请务必登录错误。
因此,您阅读了不应该这样做的建议,而且您仍然想要这么做?使其成为Windows服务或计划任务。不要在IIS中执行此操作。 – CodeCaster
正如@CodeCaster所说,你已经知道 - 这不是一个好习惯。为什么要把网站挂在一个线程上? (没有双关语意)。研究可以独立行事的替代方案 – JonE