我有正在运行 Work 方法的任务
private void Work(Crawler crawler, PropertyBag propertyBag) {}
现在我想停止所有任务 3 分钟,然后继续执行。我尝试
Thread.Sleep
但不工作。任务仍在工作。什么是停止任务 3 分钟然后继续的好解决方案。也许锁定以及如何做到这一点?
我有正在运行 Work 方法的任务
private void Work(Crawler crawler, PropertyBag propertyBag) {}
现在我想停止所有任务 3 分钟,然后继续执行。我尝试
Thread.Sleep
但不工作。任务仍在工作。什么是停止任务 3 分钟然后继续的好解决方案。也许锁定以及如何做到这一点?
Thread.Sleep
不起作用,因为它使当前线程休眠。
如果您手动创建线程,而不是使用 TPL,那么您希望拥有线程的列表/数组。您可以使用 Thread.Suspend 和 Thread.Resume 方法。
foreach (var t in threads) t.Suspend();
// Then in 3 minutes.
foreach (var t in threads) t.Resume();
请注意,睡眠/恢复已过时!
编辑
如果没有线程列表,那么您可以使用ManualResetEvent
. .WaitOne()
在尝试任何工作之前,在您的 Work 方法中对其进行操作。
当您想使任务休眠时,在您的主线程调用.Reset
上,然后在 3 分钟内调用.Set
.
无法随意自动暂停和恢复任务。但是,您可以在您可能希望暂停的代码中放置特殊的“观察者”,例如ManualResetEvent.WaitOne()
语句并随时从另一个线程重置它们。