如何检测未跟踪的未来?

How to detect untracked future?

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

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

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

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

您遇到此类问题的事实可以作为反对使用 Future 并将其替换为某些 IO 的论据:Cats 的 IO、Monix 的 Task 或 Scalaz ZIO。说到他们,你先建立你的管道,然后你 运行 它。如果您在 return 中省略了 IO 值并且您没有以任何其他方式将其组合到结果中(flatMapmap2for 理解等)它 不会 被执行 - 它仍然存在,但不会造成任何伤害。

如果你只想在 Future 上有更好的控制和错误,你可能必须写 your own WartRemover's wart or ScalaFix rule.