【问题标题】:Task.Delay vs DispatcherTimer?Task.Delay vs DispatcherTimer?
【发布时间】:2014-01-31 00:15:49
【问题描述】:

我正在考虑将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?

标签: c# task async-await delay dispatchertimer


【解决方案1】:

有两个主要区别:

  1. Task.Delay 方法将延迟指定的时间量 个周期之间,而DispatcherTimer 方法将在指定的周期时间开始一个新的周期。
  2. Task.Delay 更便携,因为它不依赖于绑定到特定 UI 的类型。

【讨论】:

  • 我不太在乎时间。我只关心它可以重复和表现。据我所知,两者都创建后台线程在时间方法中添加一个事件回调。它们的性能是否相同?
  • 性能相当。他们都没有创建后台线程。
  • @StephenCleary: 除非我们想在 UI 线程上做点什么,否则使用 ConfigureAwait(false) 是否正确?
  • @Dunken:是的,您应该在不需要特定上下文(例如 UI 上下文)的方法中为每个 await 使用 ConfigureAwait(false)
猜你喜欢
  • 2012-05-23
  • 2018-10-25
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2012-11-07
  • 2010-11-09
相关资源
最近更新 更多