public void WaitUntil(Expression <Action> conditionAction, TimeSpan timeout) { this.Act(CommandType.Wait, () => { DateTime dateTimeTimeout = DateTime.Now.Add(timeout); bool threwException = false; var compiledAction = conditionAction.Compile(); FluentException lastFluentException = null; while (DateTime.Now < dateTimeTimeout) { try { threwException = false; compiledAction(); } catch (FluentException ex) { threwException = true; lastFluentException = ex; } catch (Exception ex) { throw new FluentException("An unexpected exception was thrown inside WaitUntil(Action). See InnerException for details.", ex); } if (!threwException) { break; } System.Threading.Thread.Sleep(this.Settings.WaitUntilInterval); } // If an exception was thrown the last loop, assume we hit the timeout if (threwException == true) { throw new FluentException("Conditional wait passed the timeout [{0}ms] for expression [{1}]. See InnerException for details of the last FluentException thrown.", lastFluentException, timeout.TotalMilliseconds, conditionAction.ToExpressionString()); } }); }
public void WaitUntil(Expression <Func <bool> > conditionFunc, TimeSpan timeout) { this.Act(CommandType.Wait, () => { DateTime dateTimeTimeout = DateTime.Now.Add(timeout); bool isFuncValid = false; var compiledFunc = conditionFunc.Compile(); FluentException lastException = null; while (DateTime.Now < dateTimeTimeout) { try { if (compiledFunc() == true) { isFuncValid = true; break; } System.Threading.Thread.Sleep(this.Settings.WaitUntilInterval); } catch (FluentException ex) { lastException = ex; } catch (Exception ex) { throw new FluentException("An unexpected exception was thrown inside WaitUntil(Func<bool>). See InnerException for details.", ex); } } // If func is still not valid, assume we've hit the timeout. if (isFuncValid == false) { throw new FluentException("Conditional wait passed the timeout [{0}ms] for expression [{1}]. See InnerException for details of the last FluentException thrown.", lastException, timeout.TotalMilliseconds, conditionFunc.ToExpressionString()); } }); }