【发布时间】:2012-09-24 12:44:11
【问题描述】:
据我了解,任何使用 .NET 线程池运行的东西都像这样:
ThreadPool.QueueUserWorkItem(myproc);
当应用程序关闭时,CLR 将彻底终止。
假设在这种情况下 myproc 函数包含一个无限循环。有什么方法可以挂钩线程的终止吗?
【问题讨论】:
标签: .net multithreading clr threadpool
据我了解,任何使用 .NET 线程池运行的东西都像这样:
ThreadPool.QueueUserWorkItem(myproc);
当应用程序关闭时,CLR 将彻底终止。
假设在这种情况下 myproc 函数包含一个无限循环。有什么方法可以挂钩线程的终止吗?
【问题讨论】:
标签: .net multithreading clr threadpool
没有。当 CLR 拆除您的进程时,它会积极中止任何剩余的后台线程。我之所以说积极地中止是因为,与对Thread.Abort() 的正常调用不同,您的代码中不会引发异常,因此您无法响应它。
此时,CLR 并不特别关心您是否还有其他事情要做。你的进程已经死了,kaput,即将被掩埋,你无法阻止它。如果某些事情非常重要,以至于在进程终止之前绝对必须清理,它应该进入前台线程,以便进程能够停留足够长的时间,以便它可以做任何需要做的事情。
【讨论】: