0

我有正在运行 Work 方法的任务

private void Work(Crawler crawler, PropertyBag propertyBag) {}

现在我想停止所有任务 3 分钟,然后继续执行。我尝试

Thread.Sleep但不工作。任务仍在工作。什么是停止任务 3 分钟然后继续的好解决方案。也许锁定以及如何做到这一点?

4

2 回答 2

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.

于 2012-07-23T09:45:16.693 回答
3

无法随意自动暂停和恢复任务。但是,您可以在您可能希望暂停的代码中放置特殊的“观察者”,例如ManualResetEvent.WaitOne()语句并随时从另一个线程重置它们。

于 2012-07-23T09:43:39.710 回答