// move to datetimeprovider public static bool WaitFor( TimeSpan waitTimeout, WaitConditionDelegate exitCondition, TimeSpan minSleep, TimeSpan maxSleep, int sleepMult, TimeSpan sleepInc, string timeoutExceptionMessage, TimeSpan logInterval, WaitLoggingDelegate loggingCallback) { TimeSpan sleepTimeout = minSleep; DateTimeOffset dtNow = DateTimeOffset.Now; DateTimeOffset waitExpires = dtNow + waitTimeout; DateTimeOffset timeToLog = dtNow + logInterval; while (dtNow < waitExpires) { if (exitCondition()) { return(true); } if ((loggingCallback != null) && (dtNow > timeToLog)) { // time to call logging callback loggingCallback(); timeToLog = dtNow + logInterval; } // sanitise timeout if (sleepTimeout > maxSleep) { sleepTimeout = maxSleep; } if (sleepTimeout < minSleep) { sleepTimeout = minSleep; } Thread.Sleep(sleepTimeout); // calc next sleep timeout sleepTimeout = TimeSpan.FromSeconds(sleepTimeout.TotalSeconds * sleepMult).Add(sleepInc); dtNow = DateTimeOffset.Now; } if (timeoutExceptionMessage != null) { throw new TimeoutException(timeoutExceptionMessage); } return(false); }
public static bool WaitFor(TimeSpan waitTimeout, WaitConditionDelegate exitCondition, string timeoutExceptionMessage, TimeSpan logInterval, WaitLoggingDelegate logCallback) { return(WaitFor(waitTimeout, exitCondition, TimeSpan.FromMilliseconds(1), TimeSpan.FromMilliseconds(100), 2, TimeSpan.Zero, timeoutExceptionMessage, logInterval, logCallback)); }
public static bool WaitFor(TimeSpan waitTimeout, WaitConditionDelegate exitCondition, string timeoutExceptionMessage) { return(WaitFor(waitTimeout, exitCondition, TimeSpan.FromMilliseconds(1), TimeSpan.FromMilliseconds(100), 2, TimeSpan.Zero, timeoutExceptionMessage, TimeSpan.Zero, null)); }
public static bool WaitFor(TimeSpan waitTimeout, WaitConditionDelegate exitCondition) { return(WaitFor(waitTimeout, exitCondition, TimeSpan.FromMilliseconds(1), TimeSpan.FromMilliseconds(100), 2, TimeSpan.Zero, null, TimeSpan.Zero, null)); }