Я использую 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 ленивым? но у меня это тоже не работает.