C# 如何在3分钟内停止执行所有任务,然后继续执行代码

C# 如何在3分钟内停止执行所有任务,然后继续执行代码,c#,multithreading,task,C#,Multithreading,Task,我有正在运行工作方法的任务 private void Work(Crawler crawler, PropertyBag propertyBag) {} 现在我想停止所有TAK 3分钟,然后继续执行。我试着用 线程。睡眠但不工作。任务仍然有效。停止任务3分钟然后继续的好方法是什么。可能是锁定以及如何锁定?无法自动暂停和恢复任意任务。但是,您可以在可能需要暂停的代码中放置特殊的“观察者”,如ManualResetEvent.WaitOne()语句,并随时从其他线程重置它们。无法自动暂停和恢复任务

我有正在运行工作方法的任务

private void Work(Crawler crawler, PropertyBag propertyBag) {}
现在我想停止所有TAK 3分钟,然后继续执行。我试着用


线程。睡眠
但不工作。任务仍然有效。停止任务3分钟然后继续的好方法是什么。可能是锁定以及如何锁定?

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

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

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()


在主线程上,当您想休眠任务时,请调用
.Reset
,然后在3分钟内调用
.Set

线程。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()


在您的主线程上,当您想休眠任务时,调用
.Reset
,然后在3分钟内调用
.Set

如果一切正常,该怎么办。我可以用同样的方法使用ManualResetEvent和.Reset吗?因为我做了:ManualResetEvent mre=新的ManualResetEvent(错误);然后是mre.WaitOne();和mre.Reset();线程睡眠(3*60*1000);mre.Set();但应用程序仍在执行代码。任务仍在工作…
mre.WaitOne()
应该在任务中。@AgentFire是正确的。mre应该是所有任务的成员,而不是每个类创建的,或者是工人可以访问的某个类的静态成员。很高兴能为您提供帮助。也许你们可以发布你们的最终代码来帮助别人。若一切都在工作方法中呢。我可以用同样的方法使用ManualResetEvent和.Reset吗?因为我做了:ManualResetEvent mre=新的ManualResetEvent(错误);然后是mre.WaitOne();和mre.Reset();线程睡眠(3*60*1000);mre.Set();但应用程序仍在执行代码。任务仍在工作…
mre.WaitOne()
应该在任务中。@AgentFire是正确的。mre应该是所有任务的成员,而不是每个类创建的,或者是工人可以访问的某个类的静态成员。很高兴能为您提供帮助。也许你可以发布你的最终代码来帮助别人。这就是我会做的,是的。这就是我会做的,是的。