private void Process() { _updatable.Initialize(); var last = DateTime.UtcNow.Ticks; while (!_cts.IsCancellationRequested) { _updatable.Upadte(_cts.Token); var current = DateTime.UtcNow.Ticks; var next = last + _intervalTicks; var ticksToNext = next - current; if (ticksToNext > 0) { Thread.Sleep(TimeSpan.FromTicks(ticksToNext)); } last = DateTime.UtcNow.Ticks; } }