function tryFor10Seconds(Closure $closure) { $runTheClosure = function ($closure) { try { DB::beginTransaction(); $closure(); DB::commit(); return true; } catch (Exception $e) { DB::rollBack(); // handle the exception if needed, log it or whatever return false; } }; $start = time(); do { $result = $runTheClosure($closure); } while(!$result && (time() - $start <= 10)); return $result; }