C#线程生命周期结束。

时间:2016-08-31 08:38:55

标签: c# .net multithreading garbage-collection

我有几个线程,都在对多个文件进行文件操作(追加)。每个线程写入一个文件,从ConcurrentQueue获取数据。具有条件!queue.empty的while循环确保队列被完全处理。

当达到循环的结束条件时,线程会发生什么,例如委托方法"返回"。他们是否达到某种状态,通知垃圾收集器收集对象,或者他们在内存中保持活着,只要程序运行因此我需要手动杀死它们?

我目前没有对线程对象进行任何引用,因为我的假设是线程完成,线程被收集。

有没有办法显示当前有多少线程存活?

2 个答案:

答案 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。