Позвольте мне начать с того, что это скорее вопрос, чем проблема, которую нужно решить. У меня есть решение сейчас, и все работает отлично для меня. Но мне интересно, почему проблема возникла в первый раз.Различное поведение 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) увольняют, а иногда нет. Я не мог найти причин, почему так оно и было.
Это код, который я использовал для initilize таймера (другие части одинаковы):
TimeSpan delay = game.GetTimeLeft();
new Timer(GameEndedCallback,game,(int)delay.TotalMilliseconds,Timeout.Infinite);
}
private void GameEndedCallback(object state)
{
var game = (Game) state;
Метод OnNewGameStarted является обработчиком события и он вызывается после цепочки методов из Fleck вебсервер, когда некоторые определенное сообщение приходит Это.
Возможно, выстрел в темноте, но может быть, что ваш пул потоков исчерпан рабочих потоков? – OzrenTkalcecKrznaric
Возможный дубликат [System.Timers.Timer vs System.Threading.Timer] (http://stackoverflow.com/questions/1416803/system-timers-timer-vs-system-threading-timer) –