3 .net c# resume multithreading suspend
可能重复的问题: 有没有办法无限期地暂停一个线程?
在我的代码中,我执行以下操作
Thread mainThread
//...
mainThread.Resume();
void StartThread()
{
while (!wantQuit)
{
db.runEmail();
mainThread.Suspend();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我得到下面的例外,因为我没有暂停时调用简历.
System.Threading.ThreadStateException
Run Code Online (Sandbox Code Playgroud)
我注意到这个警告
warning CS0618: 'System.Threading.Thread.Resume()' is obsolete: 'Thread.Resume has been deprecated. Please use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources. http://go.microsoft.com/fwlink/?linkid=14202'
Run Code Online (Sandbox Code Playgroud)
所以我想知道有没有办法恢复和忽略它没有被暂停的异常/情况?我讨厌写下面而不只是一行
try
{
mainThread.Resume();
}
catch (System.Threading.ThreadStateException e)
{
}
Run Code Online (Sandbox Code Playgroud)
简单的解决方案是修复逻辑,不要在没有Suspended()时调用Resume().
但Resume/Suspend API确实已被弃用,请看一下,例如:
1)监控,等待()和脉冲()
2)AutoResetEvent或ManualResetEvent,Set()和WaitOne()
静态类Monitor更容易使用和集成lock() {},但ResetEvent在这里可能更合适,因为您可以在设置或未设置模式下创建它,并且您不太可能"错过"信号.相比之下,当稍后发生Wait()时,Monitor.Pulse()将丢失.
会在你的问题中插入一个链接,虽然我不认为它是重复的,但是接受的答案很适合用来阻止你使用Suspend/Resume.
| 归档时间: |
|
| 查看次数: |
1507 次 |
| 最近记录: |