0

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

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

4 回答 4

2

这会起作用 - 但另一种选择是使用计时器,例如System.Threading.Timeror System.Timers.Timer

你应该考虑:

  • 如果重新计算状态需要超过一秒钟,您希望发生什么?
  • RecalculateState从任意线程调用您的方法是否完全安全?
于 2012-10-03T09:12:34.137 回答
1

您可以使用System.Timers.Timer间隔1 秒。

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

请注意事实,如果 RecalculateState运行时间比预期的时间间隔长(出于 1000 个原因),您必须处理呼叫重叠,因此您必须以某种方式管理这种情况。

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

可以查看Reactive Extensions,它在最新版本中特别关注时间相关执行。

于 2012-10-03T09:12:20.760 回答
0

您不能使用计时器并进行定时事件吗?像这样的东西?

Observable.Timer(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(1)).Timestamp()
       .Subscribe(MyOnTimedEventMethod);
于 2012-10-03T09:13:15.640 回答
0

我建议为此使用计时器。

成员:

private readonly Timer _timer;

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

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

打回来:

private void OnTimerEllapsed(object sender)
{
    RecalculateState();
}
于 2012-10-03T09:18:15.937 回答