gpt4 book ai didi

c# - 在 C# 中是否应该始终保留对正在运行的 Thread 对象的引用?

转载 作者:可可西里 更新时间:2023-11-01 08:22:20 26 4
gpt4 key购买 nike

或者可以这样做吗:

new Thread( new ThreadStart( delegate { DoSomething(); } ) ).Start();

?

我似乎记得在这种情况下,Thread 对象会被垃圾回收,但底层操作系统线程会继续运行,直到传递给它的委托(delegate)结束。我基本上是在寻找 ThreadPool 功能,但不希望线程成为后台线程(即我希望它们使应用程序保持事件状态)。

更新:
根据 Jason 的说法,CLR 在运行时实际上保留了对 Thread 对象的内部引用,因此在线程退出之前不会对其进行垃圾回收。

最佳答案

我一般发现,如果我需要像你例子中那样直接启动一个新线程,而不是从线程池中抓取一个,那么它是一个长时间运行的线程,我稍后需要引用它杀死它,监视它等。对于短期运行的线程,例如在后台线程上调用 IO 等,我总是使用线程池线程(通常通过 someDelete.BeginBlah(...) 方法调用间接使用)。当使用像这样的线程池线程时,我宁愿不保留引用。我不知道其他程序员是否会不适本地使用对该线程的引用。如果我不需要引用,我就不会把它放在身边来弄乱代码。

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

关于c# - 在 C# 中是否应该始终保留对正在运行的 Thread 对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/390753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com