/** * Execute a callback within the scope of an event loop driver. * * @param callable $callback The callback to execute. * @param Driver $driver The event loop driver. If `null`, a new one is created from the set factory. * * @return void * * @see \Interop\Async\Loop::setFactory() */ public static function execute(callable $callback, Driver $driver = null) { $previousDriver = self::$driver; self::$driver = $driver ?: self::createDriver(); self::$level++; try { self::$driver->defer($callback); self::$driver->run(); } finally { self::$driver = $previousDriver; self::$level--; } }