【发布时间】:2013-08-06 06:07:48
【问题描述】:
首先我要说的是,这与其说是需要解决的问题,不如说是一个问题。我现在有了解决方案,对我来说一切正常。但我想知道为什么第一次出现问题。
这是我现在拥有的代码,它的工作方式与我预期的一样:
private void OnNewGameStarted(Game game)
{
_activeGames.Add(game);
TimeSpan delay = game.GetTimeLeft();
var timer = new Timer(delay.TotalMilliseconds) {AutoReset = false};
timer.Elapsed += (sender, args) => GameEndedCallback(game);
timer.Start();
}
private void GameEndedCallback(Game game)
{
if (_statisticsManager.RegisterGame(game))
_gamesRepository.Save(game);
_gameStatusSubscriber.GameStatusChanged(game);
}
我曾经使用 System.Threading.Timer 而不是 System.Timers.Timer,有时会触发计时器事件(GameEndedCallback 方法),有时不会。我找不到任何原因。
这是我用来初始化定时器的代码(其他部分相同):
TimeSpan delay = game.GetTimeLeft();
new Timer(GameEndedCallback,game,(int)delay.TotalMilliseconds,Timeout.Infinite);
}
private void GameEndedCallback(object state)
{
var game = (Game) state;
方法 OnNewGameStarted 是事件处理程序,当某些特定消息到达时,它会在 Fleck 网络服务器的方法链之后调用。
【问题讨论】:
-
也许是在黑暗中拍摄,但是,您的线程池是否已耗尽工作线程?
标签: c# multithreading timer