我不知道为什么会发生这种情况,我从来没有明确中止线程,所以这是一个惊喜。但我记录异常,我看到:
System.Threading.ThreadAbortException – Thread was being aborted.
它似乎发生在调用System.Threading.WaitHandle.WaitOne。我不知道这个例外是多远。我不认为我的线程曾经终止,因为我捕获日志和吞咽错误。
有谁知道我为什么得到这些错误?也许是当我强制终止我的服务器或要求它重新启动?如果不是,那么什么可能是导致他们?
解决方法
如果在Application_Start中生成线程,它们仍然会在应用程序池的AppDomain中执行。如果应用程序空闲了一段时间(意味着没有请求进入)或某些其他条件满足,ASP.NET将回收整个应用程序域。当这种情况发生时,从AppDomain启动的任何线程,包括来自Application_Start的线程,都将被中止。
更多关于应用程序池和回收在这个问题:What exactly is Appdomain recycling
如果你试图在IIS / ASP.NET中运行一个长时间运行的进程,简短的答案通常是“不要”。这就是Windows服务。