static A waitForCalculatedValueUsingChangeListener(double timeout default infinity(), IF0 f, IHasChangeListeners sender) { new BoolVar trigger; temp tempOnChange(sender, -> trigger.set(true)); while true { ping(); try object f!; trigger.waitUntilTrueAndClear(timeout); } }