如何在C#中中止,暂停和恢复线程?

前端之家收集整理的这篇文章主要介绍了如何在C#中中止,暂停和恢复线程?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何在C#中中止,暂停和恢复线程?

相关问题:

Is there a way to indefinitely pause a thread?

解决方法

一般来说,不要暂停(或中止)线程 – 您通常不能告诉它正在做什么,这可能会导致各种锁定问题,例如未释放的锁或类型初始化程序(静态构造函数)被挂起.

但是,您可能会通过更优雅的方法暂停代码 – 例如,在循环中使用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如何编写一个具有上限大小的生产者/消费者(所以如果消费者运行缓慢,它不会沼泽) – 消费者阻止,如果没有数据,生产者阻止如果有太多.

猜你在找的C#相关文章