我正在使用 ZIO:https ://github.com/zio/zio
在我的build.sbt
:
"dev.zio" %% "zio" % "1.0.0-RC9"
无论我尝试了什么,每次我需要时都会计算我的结果:
val t = Task {
println(s"Compute")
12
}
val r = unsafeRun(for {
tt1 <- t
tt2 <- t
} yield {
tt1 + tt2
})
println(r)
对于此示例,日志如下所示:
Compute
Compute
24
我试过Promise
:
val p = for {
p <- Promise.make[Nothing, Int]
_ <- p.succeed {
println(s"Compute - P")
48
}
r <- p.await
} yield {
r
}
val r = unsafeRun(for {
tt1 <- p
tt2 <- p
} yield {
tt1 + tt2
})
我遇到了同样的问题:
Compute - P
Compute - P
96
我试过了
val p = for {
p <- Promise.make[Nothing, Int]
_ <- p.succeed(48)
r <- p.await
} yield {
println(s"Compute - P")
r
}
首先,我在想也许管道已执行,但没有重新计算值,但我也不工作。
我希望能够异步计算我的值并能够重用它们。我查看了如何使 Scalaz ZIO 变得懒惰?但这对我也不起作用。