.NET:将线程启动为暂停

时间:2010-05-09 14:14:23

标签: .net multithreading

在非托管代码中,您可以创建处于挂起状态的线程。在.NET Framework中,我找不到此选项。是因为Thread构造函数将线程置于挂起状态?还有其他原因导致不支持这个吗?

1 个答案:

答案 0 :(得分:7)

当您创建新的Thread时,其ThreadStateThreadState.Unstarted,而不是ThreadState.Suspended

可能对应于操作系统级别的挂起线程;但是,托管线程的实现细节是您不应该关注的事情。 .NET线程不仅仅是围绕非托管线程的简单包装器。

您可能还会注意到,Suspend类的ResumeThread方法被标记为已过时,其中scary warning:< / p>

  

不要使用Suspend和Resume方法来同步线程的活动。暂停它时,您无法知道线程正在执行的代码。如果在安全权限评估期间挂起线程时挂起线程,则AppDomain中的其他线程可能会被阻止。如果在执行类构造函数时挂起线程,则会阻止尝试使用该类的AppDomain中的其他线程。死锁很容易发生。

在.NET中非常不鼓励直接挂起和恢复线程,如果你启动一个“挂起”的线程,那么你必须Resume它。他们希望阻止人们使用任何这些方法,因此他们会使用特殊的Unstarted状态并让您Start线程而不是Resuming它。无论如何,这是一个更清晰的抽象。

摘要:您无法直接使用该选项,因为您根本不应暂停恢复线程 - 将其保留到.NET运行时,或者甚至更好地使用{ {1}}当你可以的时候。