我正在使用此代碼來執行任務恢復和暫停。我需要暫停,因爲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
如果你認爲你需要「暫停」一項任務,那麼你做錯了什麼。在這種情況下,您將任務視爲線程。不是。你*不需要那個無限循環。還有其他方法可以執行不需要浪費線程的任務 –