【问题标题】:How to detect untracked future?如何检测未跟踪的未来?
【发布时间】:2019-09-12 01:28:46
【问题描述】:

Futures 在我的代码中执行并且未被检测到。

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

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

【问题讨论】:

标签: scala future static-analysis


【解决方案1】:

你可以得到更接近的是来自 WartRemover 的 NonUnitStatements wart,但它不能只出错 Future 语句并跳过所有其他语句。

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

如果您只想对Future 进行更好的控制和出错,您可能必须编写your own WartRemover's wartScalaFix rule

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多