的简介CompletableFutures
Java 8 带来了可用的语言功能scala.concurrent.Future
例如一元变换。
有什么区别?为什么 Scala 开发人员应该更喜欢 Scala Futures 而不是 java 8 CompletableFuture?
重新表述一下 @dk14 在评论中指出的内容,我想说的是CompletableFuture
没有惯用的 Scala api。
对于 Scala 开发人员来说,影响是:
- 缺乏 for 理解,因为它不遵循单子类型常见的 Scala 方法约定
- 使用其大部分方法时需要 java-scala 互操作开销
还值得注意的是javaCompletableFuture
不完全等同于 scalaFuture
。它更像是scala的保险丝Future
and Promise
.
考虑到上面列出的缺点,使用没有多大意义CompletableFuture
在 scala 中,除非您正在设计应该与 java 无缝互操作的公共 api。
仍然有充分的理由通过 akka.dispatch 桥在 Java 中使用 scala.concurrent.Future 吗?
我特别寻找在Java中使用akka.dispatch的理由,如果还有的话
Akka 构建于 scala 之上,有时会使用 scalaFuture
s。这意味着,如果您有部分代码是用 java 编写的,则值得将其包装在 scala api 中(使用akka.dispatch
java api) 以便能够轻松地与 akka 一起使用它。
例如,您正在用 java 实现 akka actor。当处理消息时,您想要进行一些非阻塞读取,完成后,应该将结果作为消息发送给另一个参与者。
你可以做的就是把你的 I/O 放入 javaCallable https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html,然后使用akka.dispatch.Futures#future http://doc.akka.io/api/akka/current/index.html#akka.dispatch.Futures%24@future%5BT%5D%28body:java.util.concurrent.Callable%5BT%5D,executor:scala.concurrent.ExecutionContext%29:scala.concurrent.Future%5BT%5D获得斯卡拉Future
摆脱它,然后你可以利用 akkapipe http://doc.akka.io/api/akka/current/index.html#akka.pattern.package@pipe%5BT%5D%28future:scala.concurrent.Future%5BT%5D%29%28implicitexecutionContext:scala.concurrent.ExecutionContext%29:PipeToSupport.this.PipeableFuture%5BT%5D使未来的结果作为消息传递给某个参与者。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)