我很難得到我的頭。等待延遲或使用計時器
我需要執行一些方法,每個方法都會延遲一段時間。因此,從我可以讀取的內容來看,我可以使用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
您的第一種方法假定任務按照順序執行,並在兩者之間延遲。一般來說,使用定時器將允許任務完全獨立執行。從你的問題中不清楚你的任務之間是否存在隱式依賴關係,但是如果你有可能應該使用第一種方法。如果任務的執行時間不平凡,您還必須考慮是否應該考慮縮短延遲的時間。定時器可以更好地處理這個問題。 –