单独线程上的可暂停计时器
Posted
技术标签:
【中文标题】单独线程上的可暂停计时器【英文标题】: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
,然后每次运行你都会检查上一个任务是否完成或类似的事情。
【参考方案1】:
你可以不使用计时器,而是让它成为一个有延迟的循环:
public static async Task RepeatingTask()
while(true)
Console.WriteLine( "Doing cool stuff" );
await Task.Delay( 2000 );
你可以这样开始:
Task.Run( RepeatingTask );
注意:如果您需要精确地每隔 2 秒触发一次,这将无法解决问题。
【讨论】:
以上是关于单独线程上的可暂停计时器的主要内容,如果未能解决你的问题,请参考以下文章
当活动不在前面时,在Android中暂停CountDownTimer