我需要做一些非常快速的重新计算〜每一秒。
最好的方法是什么?使用专用线程并且Thread.Sleep
可以吗?
Task.Factory.StartNew(() =>
{
while (true)
{
RecalculateState();
Thread.Sleep(1000);
}
}, TaskCreationOptions.LongRunning);
答案 0 :(得分:2)
这样可行 - 但另一种选择是使用计时器,例如System.Threading.Timer
或System.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();
}