我很难得到我的头。等待延迟或使用计时器
我需要执行一些方法,每个方法都会延迟一段时间。因此,从我可以读取的内容来看,我可以使用Task.Delay或Timer,因为它看起来在内部,Task.Delay正在使用Timer。
那么以下两种方法是否相等?如果不是,每种方法的优缺点是什么?
每种方法的调用线程会发生什么?我真的不想阻止线程。我不认为这两种方法中的任何一种都可以。
1的方法:
public async Task SimulateScenarioAsync()
{
await Task.Delay(1000).ConfigureAwait(false);
await FooAsync.ConfigureAwait(false);
await Task.Delay(2000).ConfigureAwait(false);
await BarAsync.ConfigureAwait(false);
await Task.Delay(500).ConfigureAwait(false);
await StuffAsync.ConfigureAwait(false);
}
第二个方法:
public void SimulateScenario()
{
var timer = new Timer(new TimerCallback(FooAsync), null, 1000, Timeout.Infinite);
}
public void FooAsync(Object obj)
{
// do some stuff
var timer = new Timer(new TimerCallback(BarAsync), null, 2000, Timeout.Infinite);
}
public void BarAsync(Object obj)
{
// do some stuff
var timer = new Timer(new TimerCallback(StuffAsync), null, 500, Timeout.Infinite);
}
public void StuffAsync(Object obj)
{
// do some stuff
}
如果您已经使用TPL,我会选择'Task.Delay()' –
是的,延迟方法也使用它。 – dyesdyes
您的第一种方法假定任务按照顺序执行,并在两者之间延迟。一般来说,使用定时器将允许任务完全独立执行。从你的问题中不清楚你的任务之间是否存在隐式依赖关系,但是如果你有可能应该使用第一种方法。如果任务的执行时间不平凡,您还必须考虑是否应该考虑缩短延迟的时间。定时器可以更好地处理这个问题。 –