加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:38:43 所属栏目:百科 来源:网络整理
导读:或者可以这样做: new Thread( new ThreadStart( delegate { DoSomething(); } ) ).Start(); ? 我似乎记得,在这种情况下,Thread对象将被垃圾回收,但底层的操作系统线程将继续运行,直到委托结束传递给它.我基本上正在寻找ThreadPool功能,但不希望线程是背景
或者可以这样做:
new Thread( new ThreadStart( delegate { DoSomething(); } ) ).Start();

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

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读