Dav*_*.ca 25 c# thread-safety .net-2.0
这两种方法Thread.Suspend()
和Thread.Resume()
是因为.NET 2.0过时.为什么?什么是其他替代品和任何例子?
Dar*_*man 20
您将要使用AutoResetEvent EventWaitHandle.
假设你想做这样的事情(注意:不要这样做!):
private Thread myThread;
private void WorkerThread()
{
myThread = Thread.CurrentThread;
while (true)
{
myThread.Suspend();
//Do work.
}
}
public void StartWorking()
{
myThread.Resume();
}
Run Code Online (Sandbox Code Playgroud)
像其他人所说,这是一个坏主意.尽管只在自己的线程上使用Suspend是相对安全的,但是当线程实际被挂起时,你永远无法弄清楚你是否正在调用Resume.所以Suspend and Resume已经过时了.
相反,您想要使用AutoResetEvent:
private EventWaitHandle wh = new AutoResetEvent();
private void WorkerThread()
{
while(true)
{
wh.WaitOne();
//Do work.
}
}
public void StartWorking()
{
wh.Set();
}
Run Code Online (Sandbox Code Playgroud)
工作线程将等待等待句柄,直到另一个线程调用StartWorking.它与Suspend/Resume的工作原理大致相同,因为AutoResetEvent只允许一个线程"恢复".
Dan*_*ker 11
好的选择都可以通过线程达到令人高兴等待的程度.暂停是危险的,因为它可以在线程锁定互斥锁时挂起线程 - 这是一个死锁的秘诀.
所以你的线程需要的是一个可以等待的ManualResetEvent - 当它没有持有任何锁时,它可以安全地执行.
这是有史以来最好的 Thread 教程(用于 C#):http : //www.albahari.com/threading/
等待您需要在线程上使用 .Join() 。这将等到胎面完成工作。否则,您将需要使用Wait/Pulse。
归档时间: |
|
查看次数: |
42553 次 |
最近记录: |