我试图定期运行一段代码,其间有时间间隔。可能有多个这样的代码块同时运行,所以我转向Task.Run
以利用异步方法调用和并行性。现在我想知道我应该如何执行时间间隔!Task.Delay在等待时浪费系统资源吗?
直线前进的道路将使用Task.Delay
这样的:
var t = Task.Run(async delegate
{
await Task.Delay(1000);
return 42;
});
但我不知道,如果这样做是做正确的方式,因为我相信所有的Task.Delay
不就是睡觉的线程,并恢复它一旦期限结束(即使我不确定)。如果是这种情况,那么系统即使在任务未运行时也必须支付任务的线程资源。
如果是这样的话,有没有办法在一段时间后运行一个任务而不会浪费任何系统资源?
是的,使用['System.Threading.Timer'](http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx) –
@MthetheWWatson恰恰是计时器'延迟'正在使用。 – user2586804
'await Task.Delay(1000)'不会阻塞线程,不像'Task.Delay(1000).Wait()'会做的,[更多细节](http://stackoverflow.com/a/19090043/ 1768303)。 – Noseratio