懒惰的并行价值,是否可能?

时间:2014-10-28 18:47:53

标签: scala concurrency annotations lazy-evaluation eager

标题是对的,我想要一切。

  • 在热切的评估中,一旦分配完成,就会对功能进行评估。
  • 在延迟评估中,直到需要该值才会执行此操作,但这是一个阻塞操作,就像在急切评估中一样,但是延迟了。
  • 我希望有一些能够在需要价值之前热切地同时(不阻止)开始评估。

我知道这有点奇怪,所以我做了illustrative gist

在这个例子中它完美地工作,并且懒惰的急切值的计算似乎是免费的,而其他两个值每个需要10秒。当然,事情正在另一个线程中发生,等等,但我很好,我只想有一些选择来做这样的事情,有时候,在需要的时候。

我一直在用更优雅的方式来定义它,函数注释等。最后,我找到的唯一可能是宏< / em>,在Scala(AFAIK)中不可用。

有没有办法以优雅的方式做到这一点,或者我写的内容是否优雅?

PD:只是为了让它更清晰。这就是我想要做的事情:

val eager_lazy_aux = Future(longComputation(1))
lazy val eager_lazy = Await.result(eager_lazy_aux, Duration.Inf)

这就是我想做的事情:

parallel val eager_lazy = longComputation(1)

我不是暗示的暗示,但也许添加这是我们能得到的最好的。

implicit def getFuture[T](f: Future[T]): T = Await.result(f, Duration.Inf)

0 个答案:

没有答案