【问题标题】:Pausable Timer on separate thread单独线程上的可暂停计时器
【发布时间】:2019-07-28 01:50:27
【问题描述】:

我需要在可以暂停和恢复的单独线程上运行计时器。 System.Threading.Timer 没问题。但我注意到即使在调试回调时它也会产生新线程。我不想在第一个回调完成之前开始下一个回调,我想在回调执行期间暂停计时器。

  • System.Threading.Timer 无法暂停。
  • 我不会测量任何时间,所以没有System.Diagnostics.Stopwatch
  • this qestion 中,有人实现了他自己的源自Timer 的类,但我不知道这是什么计时器——System.Threading.Timer 是密封的。
  • System.Windows.Threading.DispatcherTimer 可以停止,但回调是在 UI 线程上调度的,我不确定这个类的可移植性。

我该怎么办?

【问题讨论】:

  • 你可以让一个任务进入一个循环,中间有一个延迟,然后让它运行。
  • 是的,我现在只是在写一个带有 while 循环的线程,但我想可能已经提供了一些内置方式。
  • 你可以使用一个普通的计时器,但你正在做的事情是Task,然后每次运行你都会检查上一个任务是否完成或类似的事情。

标签: c# multithreading timer


【解决方案1】:

你可以不使用计时器,而是让它成为一个有延迟的循环:

public static async Task RepeatingTask()
{
    while(true)
    {
        Console.WriteLine( "Doing cool stuff" );
        await Task.Delay( 2000 );
    }
}

你可以这样开始:

Task.Run( RepeatingTask );

注意:如果您需要精确地每隔 2 秒触发一次,这将无法解决问题。

【讨论】:

    猜你喜欢
    • 2012-06-06
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多