public void Spin(CancellationToken cancel = default(CancellationToken)) { Logger.LogInformation("Start spinning"); while (ROS.OK) { callbackQueue.CallAvailable(ROS.WallDuration); if (cancel.IsCancellationRequested) { break; } Thread.Yield(); } }
public void Spin(CancellationToken token) { TimeSpan wallDuration = new TimeSpan(0, 0, 0, 0, ROS.WallDuration); Logger.LogInformation("Start spinning"); while (ROS.OK) { DateTime begin = DateTime.UtcNow; callbackQueue.CallAvailable(ROS.WallDuration); if (token.IsCancellationRequested) { break; } DateTime end = DateTime.UtcNow; var remainingTime = wallDuration - (end - begin); if (remainingTime > TimeSpan.Zero) { Thread.Sleep(remainingTime); } } }