Scala Futures 和 java 8 CompletableFuture

Scala Futures and java 8 CompletableFuture

CompletableFutures 在 Java 8 中的引入带来了 scala.concurrent.Future 中可用的语言功能,例如单子转换。

What are the differences, and why a Scala developer should prefer Scala Futures over java 8 CompletableFuture ?

改写@dk14 在评论中指出的内容我会说 CompletableFuture 没有惯用的 Scala api.

对于 Scala 开发人员而言,影响是:

  • 由于它不遵循 monadic 类型常见的 Scala 方法约定,因此缺乏 for 理解
  • java-使用大部分方法时需要 scala 互操作开销

还值得注意的是,java CompletableFuture 并不完全等同于 scala Future。它是 scala FuturePromise.

的融合

考虑到上面列出的缺点,在 scala 中使用 CompletableFuture 没有多大意义,除非你设计的 public api 应该与 java 无缝互操作.

Are there still good reasons to use the scala.concurrent.Future in Java through akka.dispatch bridge?

I am particularly looking for reasons to use akka.dispatch in Java, if there are still any

Akka 建立在 scala 之上,它有时使用 scala Futures。这意味着如果你有一部分代码是用 java 编写的,那么值得将它包装在 scala api 中(使用 akka.dispatch java api)以便能够轻松地与 akka 一起使用它。

例如,您正在 java 中实现 akka actor。当处理消息时,你想做一些非阻塞读取,完成后,应该将结果作为消息发送给另一个参与者。

你可以做的是将你的 I/O 放入 java Callable, then use akka.dispatch.Futures#future to get scala Future out of it, and then you could leverage akka pipe 中,使未来的结果作为消息传递给某个演员。