应该在C#中始终保持对正在运行的Thread对象的引用?

前端之家收集整理的这篇文章主要介绍了应该在C#中始终保持对正在运行的Thread对象的引用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
或者可以这样做:
new Thread( new ThreadStart( delegate { DoSomething(); } ) ).Start();

我似乎记得,在这种情况下,Thread对象将被垃圾回收,但底层的操作系统线程将继续运行,直到委托结束传递给它.我基本上正在寻找ThreadPool功能,但不希望线程是背景线程(即我希望他们保持应用程序活着).

更新:根据Jason,CLR在运行时实际上保留了Thread对象的内部引用,所以在线程退出之前不会被垃圾回收.

解决方法

我一般发现,如果我需要直接在你的例子中开始一个新的线程,而不是从线程池中抓取一个线程,那么它是一个长时间运行的线程,我将需要一个引用来杀死它,监视它等等.对于短时间线程,如在后台线程等上调用IO,我总是使用线程池线程(通常间接通过someDelete.BeginBlah(…)方法调用).当使用像这样的线程池线程时,我宁可不保留引用.我不知道另一个程序员是否可能不适当地使用该线程的引用.如果我不需要参考,我不会保留它来混乱代码.

编辑:要回答关于正在垃圾回收的线程的编辑,线程运行时不会发生. CLR保持对每个正在运行的线程的引用.表示线程的对象将不被收集.

猜你在找的C#相关文章