public Runner(ProjectorBase projector, TimeSpan?runForDuration = null) { Projector = projector; RunForDuration = runForDuration ?? TimeSpan.FromMinutes(1); _startedAt = new InterlockedDateTime(DateTime.MaxValue); _timeoutCalc = new TimeoutCalculator(TimeSpan.Zero); _runnerTimer = CreateTimer(_timeoutCalc); }
private System.Timers.Timer CreateTimer(TimeoutCalculator timeoutCalc) { var timeout = timeoutCalc.CalculateNext(); var result = new System.Timers.Timer(timeout) { AutoReset = false }; result.Elapsed += OnTimerElapsed; return(result); }