我正在使用此代码来执行任务恢复和暂停。我需要暂停,因为doSomething();方法不会每次都工作,例如当数据来自web api时。所以CPU不会疲劳。我在很多项目中都使用这个技术。但我不确定这是可靠的还是最好的方法。我可以问你的想法吗?对于任务暂停和恢复我可以使用ManualResetEventSlim吗?
static ManualResetEventSlim mre = new ManualResetEventSlim(false);
static void Main(string[] args)
{
mre.Set();
Task.Factory.StartNew(() =>
{
while (true)
{
mre.Wait();
doSomething();
}
});
mre.Reset();
Console.WriteLine("Task Paused");
Console.WriteLine("Task Will Resume After 1 Second");
Thread.Sleep(1000);//To simulate, waiting data from Web Api etc. for doSomething();
mre.Set();
Console.Read();
}
这是一个代码审查问题,你应该问一下https://codereview.stackexchange.com/ –
你在'mre.mait()'和'mre.Reset()'之间有竞争条件。设置()'。有可能mre.Wait()的执行速度比重置信号的速度快,因此你的'doSomething()'方法在第一个Thread.Sleep()之前触发。如果在mre.Reset()之前添加Thread.Sleep(10),则可以轻松地进行仿真。 – Szer
如果你认为你需要“暂停”一项任务,那么你做错了什么。在这种情况下,您将任务视为线程。不是。你*不需要那个无限循环。还有其他方法可以执行不需要浪费线程的任务 –