我有一个用dotNet编写的Windows服务。有一个工作服务使用各种Delegate.BeginInvokes生成工作线程。当服务崩溃时,那些线程会自动清理?如果是的话,什么时候?
答案 0 :(得分:1)
您的流程创建的所有线程都在该流程中。当您的应用程序崩溃时,您的进程将死亡,并且该进程中的所有线程都会突然终止。他们没有被终止友好(他们没有得到中止信号或任何东西),他们刚刚被杀死。它们可能会或可能没有足够的处理器时间来完成执行 - 而是取决于它们正在做什么,以及Windows转储过程的速度有多快。
所有强大的Windows版本(2000+)应该将您的进程隔离,因此当它崩溃时,整个进程空间被转储并且内存被回收。如果您在崩溃时访问非托管资源,那么整个图片会发生变化,答案是“它取决于”。
答案 1 :(得分:0)
仅当服务终止并从内存中卸载时