Task.Delay vs DispatcherTimer?

时间:2014-01-12 04:01:14

标签: c# task async-await delay dispatchertimer

我正在考虑使用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
    }
}

2 个答案:

答案 0 :(得分:5)

有两个主要区别:

  1. Task.Delay方法将在周期之间延迟指定的时间,而DispatcherTimer方法将在指定的周期时间内开始新的周期。
  2. 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
    }
}