Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 任务。延迟vs调度员?_C#_Task_Async Await_Delay_Dispatchertimer - Fatal编程技术网

C# 任务。延迟vs调度员?

C# 任务。延迟vs调度员?,c#,task,async-await,delay,dispatchertimer,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.Sta

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


有两个主要区别:

  • Task.Delay
    方法将在两个周期之间延迟指定的时间量,而
    dispatchermer
    方法将在指定的周期时间开始新的周期
  • Task.Delay
    更易于移植,因为它不依赖于绑定到特定UI的类型

  • 我不太在乎时间。我只在乎它能重复和表现。据我所知,两个创建后台线程都在time方法中添加了事件回调。它们的性能相同吗?性能是可比的。它们都不创建后台线程。@StephenCleary:除非我们想在UI线程上执行某些操作,否则使用ConfigureAwait(false)是否正确?@Dunken:是的,您应该在不需要特定上下文(如UI上下文)的方法中为每个
    await
    使用
    ConfigureAwait(false)
    // Every thing inside a function
    async void TaskTimer()
    {
        while (true)
        {
            await Task.Delay(5000);
            // Do stuff
        }
    }