У меня есть высокоуровневая структура кода, которая выглядит следующим образом:
val block: (=> Option[Seq[String]]) = ...
val matches = block().get.toArray
Проблема в том, что этот код может завершиться ошибкой, т.е. .get
означает None
в зависимости от времени, например, я страница- слишком часто удаляя Google, тогда я бы подождал и повторил попытку ...
Я могу сделать ожидание, как это, то есть случайное ожидание между 11-16 с:
val random = new Random()
Thread.sleep((11000 * random.nextFloat() + 6000).ceil.toInt)
Что быэлегантный однострочный способ цикла [ожидания], пока результат выполнения block
не будет пустым?Что-то вроде:
val timeInMillis = (11000 * random.nextFloat() + 6000).ceil.toInt
block().getOrWaitUntilNonEmpty(timeInMillis).toArray