或者可以这样做:
new Thread( new ThreadStart( delegate { DoSomething(); } ) ).Start();
?
我似乎记得,在这种情况下,Thread对象将被垃圾回收,但底层的操作系统线程将继续运行,直到委托结束传递给它.我基本上正在寻找ThreadPool功能,但不希望线程是背景线程(即我希望他们保持应用程序活着).
更新:根据Jason,CLR在运行时实际上保留了Thread对象的内部引用,所以在线程退出之前不会被垃圾回收.
我一般发现,如果我需要直接在你的例子中开始一个新的线程,而不是从线程池中抓取一个线程,那么它是一个长时间运行的线程,我将需要一个引用来杀死它,监视它等等.对于短时间线程,如在
后台线程等上
调用IO,我总是使用线程池线程(通常间接通过someDelete.BeginBlah(…)
方法调用).当使用像这样的线程池线程时,我宁可不保留引用.我不知道另一个程序员是否可能不适当地使用该线程的引用.如果我不需要参考,我不会保留它来混乱
代码.
编辑:要回答关于正在垃圾回收的线程的编辑,线程运行时不会发生. CLR保持对每个正在运行的线程的引用.表示线程的对象将不被收集.