我有一个高级代码结构,如下所示:
val block: (=> Option[Seq[String]]) = ...
val matches = block().get.toArray
问题是这段代码可能会失败,即.get
being None
取决于时间,例如我是页-scraping谷歌太频繁,然后我会等待并重试......
我可以像这样等待,即在 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
Try softwaremill/retry https://github.com/softwaremill/retry like so
retry.Pause(max = 10, Defaults.delay)(odelay.Timer.default) {
block
}
有依赖关系
"com.softwaremill.retry" %% "retry" % "0.3.2"
"com.softwaremill.odelay" %% "odelay-core" % "0.3.0"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)