This question让我想到了.NET等价物。 Thread类的ThreadState
属性有什么价值?在此代码示例中:
if (someThread.ThreadState != System.Threading.ThreadState.Running)
{
someThread = new Thread(SomeMethod);
someThread.Start();
}
someThread
的{{1}}媒体资源可以在ThreadState
和Running
内的代码之间切换为if
,对吗?
答案 0 :(得分:4)
ThreadState是最初看起来很有前途的奇妙属性之一,但是一旦你深入了解函数的方式,你会发现它几乎完全没用。
ThreadState的主要问题是枚举名称非常容易引起误解。例如,使用ThreadState.Runnning。这是一个非常糟糕的名称,因为它实际上并不表示线程正在运行。相反,它表示线程在最近的某个时刻正在运行,可能会或可能不会仍在运行。
这看似微不足道,但事实并非如此。从字面上理解枚举的名称并生成非常漂亮的代码非常容易。然而,除了代码读取,它通常基于有缺陷的逻辑。
我实际上只是将此属性用于调试目的。
此值在非常有限的场景集中非常有用,在这些场景中,您有一些其他机制可以控制您正在查看的线程。如lock或WaitHandle。但通常使用其他形式的同步比依赖此属性更好。
答案 1 :(得分:2)
来自MSDN:
重要说明:
有两个线程状态枚举, System.Threading.ThreadState和 System.Diagnostics.ThreadState。 线程状态枚举仅在一些调试中引起关注 场景。 您的代码永远不应该使用线程状态来同步活动 线程。
答案 2 :(得分:1)
ThreadState对于在调试器中查看非常有用,以帮助理解和调试某些类型的阻塞/同步错误。例如,您可以通过查看调试器中的特定线程是否被阻塞,并将ThreadState设置为ThreadState.WaitSleepJoin。
话虽如此,这是我几乎从不依赖的东西。我尝试使用它进行调试的结果好坏参半,所以一般来说,我认为通常最好假装它不存在。