Task.Delay与DispatcherTimer哪个更好?

13

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

对比

// Every thing inside a function
async void TaskTimer()
{
    while (true)
    {
        await Task.Delay(5000);
        // Do stuff
    }
}

你在哪里启动TaskTimer? - Simon_Weaver
1个回答

8

这两种方法有两个主要区别:

  1. Task.Delay 方法会在循环之间延迟指定的时间,而 DispatcherTimer 方法会在指定的周期时间内开始一个新的循环。
  2. Task.Delay 更加便携,因为它不依赖于与特定 UI 相关的类型。

我并不太关心时间,我只关心它能否重复和性能。据我所知,无论是创建后台线程还是在接近时间时添加事件回调,它们的性能都相同吗? - Thanh Nguyen
性能相当。它们都不会创建后台线程。 - Stephen Cleary
@StephenCleary:除非我们想在UI线程上执行操作,否则使用ConfigureAwait(false)是正确的吗? - Dunken
3
是的,对于不需要特定上下文(比如UI上下文)的方法中的每个await都应该使用ConfigureAwait(false) - Stephen Cleary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接