我正在使用 play 框架来实现 REST API 服务。
在一个函数中,我使用 java 异步库与另一个服务通信,它返回一个
java.util.concurrent.Future<T>
我将(使用 Guava Futures.transform(~)
)映射到 java.util.concurrent.Future<play.mvc.Result>
中.
现在,我如何将其设为 play.libs.F.Promise<Result>
这样我就可以制作AsyncResult
?
我找到了 play.libs.Akka.asPromise(scala.concurrent.Future<T> future)
但我找不到一种方法(在 Java 中)从 Java 中获得 Scala 的 future 。
编辑临时解决方案: 这是我现在正在使用的:
Future<T> future = asyncGetTheFuture();
Promise<T> promise = Akka.future(new JFutureToPromise<T>(tempFuture));
与
class JFutureToPromise<T> implements Callable<T> {
final Future<T> future;
final long time;
final TimeUnit unit;
private JFutureToPromise(Future<T> future, long time, TimeUnit unit) {
this.future = future;
this.time = time;
this.unit = unit;
}
private JFutureToPromise(Future<T> future) {
this(future, 10L, TimeUnit.SECONDS);
}
@Override
public T call() throws Exception {
return future.get(time, unit);
}
}
最佳答案
没有办法以非阻塞方式/非轮询方式将任意 j.u.c.Future 转换为异步 Future/Promise。 自己试试看:)
关于java - 从 java.util.concurrent.Future<T> 到 play.libs.F.Promise<T> : How to do that in Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18230172/