讓我從這個問題開始說這是一個問題,而不是一個需要解決的問題。我現在有解決方案,事情對我來說工作得很好。但我想知道爲什麼第一次出現問題。System.Timers.Timer和System.Threading.Timer的不同行爲
這是我現在所擁有的代碼,它就像我期望:
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是事件處理程序,並當一定的消息涉及到它的從斑點的網絡服務器的方法鏈之後稱爲它。
也許是在黑暗中拍攝的,但是,難道你的線程池中的工作線程已經耗盡嗎? – OzrenTkalcecKrznaric
可能重複的[System.Timers.Timer vs System.Threading.Timer](http://stackoverflow.com/questions/1416803/system-timers-timer-vs-system-threading-timer) –