Task.Delay vs Thread.Sleep用于暂停System.Timers.Timer的工作

时间:2018-05-15 13:50:33

标签: c# multithreading performance task

我已经开始讨论了:在循环,Task.Delay或Thread.Sleep中暂停System.Timers.Timer作业1秒的最佳方法是什么?

以下是示例案例:

timer.Elapsed += (sender, args) =>
{
  for (int i = 0; i < 15; i++)
  {
    Thread.Sleep(1000);
    if (Connection.IsAlive) return true;
  }
};

请帮我解释一下:)

1 个答案:

答案 0 :(得分:0)

这取决于你的目标是什么。

Thread.Sleep将阻止正在使用的系统线程。默认情况下,System.Timers.Timer使用系统线程池,这意味着您不会阻止主线程,并且Thread.Sleep 可能的使用将与其余部分同时执行你的计划。如果您希望使用(并因此阻止)特定线程,则需要使用SynchronizingObject属性,与Thread.Sleep配合使用。

Task.Delay将提供逻辑延迟而不会阻塞当前线程。除非您有理由阻止特定线程,否则这是最好的方法。请注意,您需要使事件处理程序异步才能使用Task.Delay

 timer.Elapsed += async (sender, args) =>
    {
         for (int i = 0; i < 15; i++)
         {
            await Task.Delay(1000);
            ...
         }
    }
相关问题