如何在C#中中止,暂停和恢复线程?
相关问题:
解决方法
一般来说,不要暂停(或中止)线程 – 您通常不能告诉它正在做什么,这可能会导致各种锁定问题,例如未释放的锁或类型初始化程序(静态构造函数)被挂起.
但是,您可能会通过更优雅的方法暂停代码 – 例如,在循环中使用ManualResetEvent,外部代码(在另一个线程上)可以打开和关闭:
// worker loop while(alive) { // if the gate is closed,wait up to 5 seconds; if still not // open,go back to the loop-start to re-check "alive" if (!gate.WaitOne(5000)) continue; // do work... }
那么另一个具有访问权限的线程(可能是间接的)可以暂停(重置)并恢复(设置)工作者,但是知道它只能在安全状态下暂停.
回复你的评论(另一个答复) – 听起来你有一个读者和作家;理想的生产者/消费者场景.我有一个例子on this question如何编写一个具有上限大小的生产者/消费者(所以如果消费者运行缓慢,它不会沼泽) – 消费者阻止,如果没有数据,生产者阻止如果有太多.