private bool RoutineLoop() { var elapsedMs = stopwatch.ElapsedMilliseconds; routine.Invoke(Delta); var elapsedMsDelta = stopwatch.ElapsedMilliseconds - elapsedMs; Delta = Math.Max(0, timeout - elapsedMsDelta); if (Delta > timeout) { OnDeltaVariation?.Invoke(this, new InternalRoutineEventArgs(Name, Delta, ticksPerSecond, timeout)); } return(IsRunning && !IsCanceled); }
private void Loop() { var task = Execute(() => routine.Invoke(delta, isCanceled)); if (isCanceled || task == null) { return; } var result = task.Result < 0 ? 0 : task.Result; delta = Math.Max(0, result); if (delta > timeout) { OnDeltaVariation?.Invoke(this, new InternalRoutineEventArgs(Name, delta, ticksPerSecond, timeout)); } resetEvent.Wait((int)delta); Loop(); }