如何检测未跟踪的未来



期货在我的代码中执行,没有被检测到。

def f(): Future[String] = {
  functionReturningFuture() // How to detect this?
  Future("")
}

理想情况下,静态分析工具将有助于检测这一点。

你可以越接近WartRemover NonUnitStatements疣,但它不能只错误Future语句而跳过所有其他语句。

您遇到此类问题的事实可以用作反对使用Future并将其替换为一些 IO 的论据:猫的IO、莫尼克斯的Task或 Scalaz Z IO 。当涉及到它们时,您首先构建管道,然后运行它。如果你省略了IO值作为回报,并且你没有以任何其他方式(flatMapmap2for理解等(将其组合成结果,它就不会被执行 - 它仍然存在,但不会造成伤害。

如果你想在Future上拥有更大的控制和错误,你可能不得不编写你自己的WartRemover的疣或ScalaFix规则。

最新更新