Suspend()
- 在C#中,线程的挂起可以使用suspend()方法。可此方法早就被官方强烈反对使用,因为你不知道suspend操作会使程序挂起在哪一行代码,这很容易带来一些意料之外的问题。在Visual Studio IDE中使用suspend会被提示“Thread.Suspend has been deprecated. Use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources."
不得不说微软的文档好!
- 文档已经说地很清楚了,使用suspend,你不知道线程正在执行什么代码。如果线程挂起在一个类型的构造函数里,而其他对象对这个类型的对象有所依赖,那么很容易造成死锁。
- 这就是为什么如今的线程机制是cooperative model,需要线程自己去决定应该在哪里阻塞,而在那里阻塞由编写代码的人决定,这样可以确保线程在被挂起时不会占据其它资源。比如
ManaulResetEvent
,给线程设置信号,线程在哪里挂起由WaitOne
的位置决定,也就是由程序员确定。