我有几个线程,都在对多个文件进行文件操作(追加)。每个线程写入一个文件,从ConcurrentQueue获取数据。具有条件!queue.empty的while循环确保队列被完全处理。
当达到循环的结束条件时,线程会发生什么,例如委托方法"返回"。他们是否达到某种状态,通知垃圾收集器收集对象,或者他们在内存中保持活着,只要程序运行因此我需要手动杀死它们?
我目前没有对线程对象进行任何引用,因为我的假设是线程完成,线程被收集。
有没有办法显示当前有多少线程存活?
答案 0 :(得分:1)
检查应用程序中运行的线程数
Task Manager => Details => Right Click => Select Column => Threads
并检查包含exe
这些可能包括GC线程,终结器线程和其他(如果附加了VS Debug Threads)
完成后你不需要自己杀死。但是,您可以使用IsAlive
属性检查线程是否已完成其工作。
答案 1 :(得分:0)
当当前函数(以及递归调用当前函数的整个调用树)终止时,线程终止。
E.g。
void main()
{
Thread thread = new Thread(f);
}
void f()
{
// allocate suff here
g();
}
void g()
{
// allocate stuff here also
}
当 f()完成时,线程线程完成。在 f 和 g 中分配的对象无法访问(如果它们仅属于这些函数的本地对象),并且在CLR想要时将被GC。