我正在考虑使用Task.Delay()
作为不间断计时器,因为它更简单易读。
由于我是.NET的新手,我发现两个代码之间没有显着差异。你能告诉我他们之间的区别(如果有的话)吗?
// Create variable at some place
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(5);
timer.Tick += timer_Elapsed;
timer.Start();
// Function other place
void timer_Elapsed(object sender, EventArgs e)
{
//Do stuff
}
VS
// Every thing inside a function
async void TaskTimer()
{
while (true)
{
await Task.Delay(5000);
// Do stuff
}
}
答案 0 :(得分:5)
有两个主要区别:
Task.Delay
方法将在周期之间延迟指定的时间,而DispatcherTimer
方法将在指定的周期时间内开始新的周期。Task.Delay
更具可移植性,因为它不依赖于与特定UI绑定的类型。答案 1 :(得分:0)
您也可以await
使用DispatcherTimer
,然后您可以自己衡量效果。例如:
async void TaskTimer()
{
DispatcherTimer timer = new DispatcherTimer();
TaskCompletionSource<bool> tcs;
EventHandler tickHandler = (s, e) =>
tcs.TrySetResult(true);
timer.Interval = TimeSpan.FromSeconds(5000);
timer.Tick += tickHandler;
timer.Start();
while (true)
{
tcs = new TaskCompletionSource<bool>();
await tcs.Task;
// Do stuff upon next tick
}
}