如何重新计算某事〜每秒一次?

时间:2012-10-03 09:10:48

标签: c#

我需要做一些非常快速的重新计算〜每一秒。 最好的方法是什么?使用专用线程并且Thread.Sleep可以吗?

        Task.Factory.StartNew(() => 
        {
            while (true)
            {
                RecalculateState();
                Thread.Sleep(1000);
            }
        }, TaskCreationOptions.LongRunning);

4 个答案:

答案 0 :(得分:2)

这样可行 - 但另一种选择是使用计时器,例如System.Threading.TimerSystem.Timers.Timer

你应该考虑:

  • 如果再生血管状态需要超过一秒钟,你想发生什么?
  • 从任意线程调用你的RecalculateState方法是否完全安全?

答案 1 :(得分:1)

您可以使用System.Timers.Timer 1秒interval

它已经在一个新的线程中运行。

注意事实,如果 RecalculateState运行的时间长于预期的间隔(因为1000个原因),你必须处理重叠的呼叫,所以你必须在某些情况下管理这种情况办法。

可能的解决方案之一是仅在执行完方法后运行新代码,并测量执行时间和间隔之间的差异。但这不是一件容易的事。幸运的是有人已经考虑过这个问题。

可以看一下Reactive Extensions在最新版本中特别关注时间依赖执行。

答案 2 :(得分:0)

你不能使用计时器并制作一个ontimed事件吗? 像这样的东西?

Observable.Timer(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(1)).Timestamp()
       .Subscribe(MyOnTimedEventMethod);

答案 3 :(得分:0)

我建议使用计时器。

构件:

private readonly Timer _timer;

在构造函数中实例化实例,例如:

_timer= new Timer(OnTimerEllapsed, null, 0, 1000);

回调:

private void OnTimerEllapsed(object sender)
{
    RecalculateState();
}