Example #1
0
        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);
        }
Example #2
0
        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();
        }